Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > CertDeleteCertificateFromStore не удаляет


Автор: achepkunov 24.10.2011, 15:22
Здравствуйте, уважаемые!

Понадобилось удалять сертификат  из системного хранилища. На MSDN Нашел замечательный пример, Хранилище открывается, сертификаты перебираются, но при попытке удалить сертификат пишет что доступ запрещен (Программа из примера так не пишет, ;) но если подглядеть GetLastError после  CertDeleteCertificateFromStore, то код ошибки 80070005)

Код


hStoreHandle = CertOpenSystemStore(
     NULL,     
     "ROOT")

while(pCertContext= CertEnumCertificatesInStore(
    hStoreHandle,
    pCertContext))
{

// skip-skip

   if(CertDeleteCertificateFromStore(
     pDupCertContext))   
   {
       printf("The certificate has been deleted. Continue. \n");
   }
   else
   {
      printf("The deletion of the certificate failed.\n");
   }



вот ссылка на пример, если нужно: http://msdn.microsoft.com/en-us/library/aa382045%28v=VS.85%29.aspx

Автор: achepkunov 26.10.2011, 14:06
Хе-хе. 

Код

//      The "root" store is treated differently from the other system
//      stores. Before a certificate is added to or deleted from the "root"
//      store, a pop up message box is displayed. The certificate's subject,
//      issuer, serial number, time validity, sha1 and md5 thumbprints are
//      displayed. The user is given the option to do the add or delete.
//      If they don't allow the operation, LastError is set to E_ACCESSDENIED.


Т.е. если приложение консольное, окошко с подтверждением появится не может и система на всякий случай доступ запрещает. :( Жаль. 

Но может можно как-то по хацкерски?

Автор: xvr 27.10.2011, 16:52
Цитата(achepkunov @  26.10.2011,  14:06 Найти цитируемый пост)
Т.е. если приложение консольное, окошко с подтверждением появится не может

Консольность программы никоим образом не мешает в ней создавать обычные окна, в том числе и pop-up диалоги. Так что видимо что то другое мешает

Автор: achepkunov 28.10.2011, 11:35
Точно. Возможно фазы луны :(

В какой-то день видел это вылезающее окно, нажимал Yes сертификат удалялся. Что это было, не пойму, кажется ничего не менял ни до, ни после, но окошко вылезало только один день. Бред какой-то. :( Пробовал на двух машинах.

Автор: achepkunov 8.11.2011, 12:31
вернулся к вопросу и все решил smile

Первая (закомментированная) функция почему-то открывает хранилище как r/o, вторая - дает удалять

Код

/*    if ( !(hStoreHandle = CertOpenSystemStore(
         NULL,     
         StoreName)))
*/
if(!(hStoreHandle = CertOpenStore(
   CERT_STORE_PROV_SYSTEM_A,        // The store provider type
   0,                               // The encoding type is not needed
   NULL,                            // Use the default HCRYPTPROV
   CERT_SYSTEM_STORE_LOCAL_MACHINE, // Set the store location in a
                                    // registry location
   StoreName                        // The store name 
   ))
  )    
/**/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)