Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Наборы обновлений для Windows XP/2003/Windows 7 (http://forum.oszone.net/forumdisplay.php?f=62)
-   -   [утилита] Установка неподписанных драйверов (http://forum.oszone.net/showthread.php?t=109518)

simplix 19-06-2008 10:35 829838

[утилита] Установка неподписанных драйверов
 
Вложений: 1
Нашёл исходник утилиты, которая позволяет корректно вычислять PrivateHash для выбора параметра "Пропускать", при установке драйвера без цифровой подписи.

читать дальше »
Код:

#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>

#define HP_HASHVALUE HP_HASHVAL

/* This program turns the Driver signing Policy On/Off for Windows XP */
 * Written by Stefan `Sec` Zehl <sec@xxxxxx>, 15.11.2004
 *
 * Thanks to sysinternals.com for regmon and apispy
 *        to msdn.microsoft.com for windows reference
 *        to cygwin for their environment
 */

void MyHandleError(char *s){
        printf("Error: %s, number %x\n.",s,(unsigned int)GetLastError());
        exit(1);
}
//--------------------------------------------------------------------
int main(void){
        HCRYPTPROV hCryptProv;
        HCRYPTHASH hHash;
        BYTE data[16];
        DWORD len;
        DWORD seed;
        HKEY hkey;
        BYTE onoff=0; // This is the On/Off toggle
        char input[4];
        int x;

        // HKLM\System\WPA\PnP\seed
        if(RegOpenKeyEx(
                        HKEY_LOCAL_MACHINE,
                        "System\\WPA\\PnP",
                        0,
                        KEY_READ,
                        &hkey
                        )==ERROR_SUCCESS){
                printf("RegOpenKey sucess\n");
        }else{
                printf("RegOpenKey failure\n");
        };

        len=sizeof(seed);
        if(RegQueryValueEx(
                        hkey,
                        "seed",
                        NULL,
                        NULL,
                        (BYTE*)&seed,
                        &len
                        )==ERROR_SUCCESS){
                printf("RegQueryValue sucess\n");
        }else{
                printf("RegQueryValue failure\n");
        };

        if(hkey)
                RegCloseKey(hkey);

        printf("Seed=%x\n",(unsigned int)seed);

        printf("Hello, World\n");
        if(CryptAcquireContext(
                                &hCryptProv,
                                NULL,
                                NULL,
                                PROV_RSA_FULL,
                                0))
        {
                printf("CryptAcquireContext complete. \n");
        } else {
                MyHandleError("Acquisition of context failed.");
        }
        //--------------------------------------------------------------------
        // Create a hash object.

        if(CryptCreateHash(
                                hCryptProv,
                                CALG_MD5,
                                0,
                                0,
                                &hHash))
        {
                printf("An empty hash object has been created. \n");
        } else {
                MyHandleError("Error during CryptBeginHash!\n");
        }
        //--------------------------------------------------------------------
        // Compute the cryptographic hash on the data.

        input[0]=0;
        input[1]=onoff; // This is the Value!
        input[2]=0;
        input[3]=0;

        if(CryptHashData(
                        hHash,
                        input,
                        sizeof(input),
                        0))
        {
                printf("The data has been hashed. \n");
        } else {
                MyHandleError("Error during CPHashData!\n");
        }
        //--------------------------------------------------------------------

        if(CryptHashData(
                        hHash,
                        (BYTE*)&seed,
                        sizeof(seed),
                        0))
        {
                printf("The data has been hashed. \n");
        } else {
                MyHandleError("Error during CPHashData!\n");
        }
        //--------------------------------------------------------------------
        len=sizeof(data);
        if( CryptGetHashParam(
                        hHash,
                        HP_HASHVALUE,
                        data,
                        &len,
                        0))
        {
                printf("The hash has been retrieved. \n");
        } else {
                MyHandleError("Error during CPGetHashParam!\n");
        }

        //--------------------------------------------------------------------
        // Clean up.

        // Destroy the hash object.

        if(hHash) {
                if(!(CryptDestroyHash(hHash)))
                        MyHandleError("Error during CryptDestroyHash");
        }

        // Release the CSP.

        if(hCryptProv) {
                if(!(CryptReleaseContext(hCryptProv,0)))
                        MyHandleError("Error during CryptReleaseContext");
        }

        printf("Hash: ");
        for(x=0;x<sizeof(data);x++){
                printf("%x ",data[x]);
        };
        printf("\nCreate md5 hash completed without error. \n");

        //--------------------------------------------------------------------
        // HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\PrivateHash
        if(RegOpenKeyEx(
                        HKEY_LOCAL_MACHINE,
                        "Software\\Microsoft\\Windows\\CurrentVersion\\Setup",
                        0,
                        KEY_WRITE,
                        &hkey
                        )==ERROR_SUCCESS){
                printf("RegOpenKey sucess\n");
        }else{
                printf("RegOpenKey failure\n");
        };

        len=sizeof(seed);
        if(RegSetValueEx(
                        hkey,
                        "PrivateHash",
                        0,
                        REG_BINARY,
                        data,
                        sizeof(data)
                        )==ERROR_SUCCESS){
                printf("RegSetValueEx sucess\n");
        }else{
                printf("RegSetValueEx failure\n");
        };

        if(hkey)
                RegCloseKey(hkey);
        //--------------------------------------------------------------------
        // HKLM\Software\Microsoft\Driver Signing\Policy
        if(RegOpenKeyEx(
                        HKEY_CURRENT_USER,
                        "Software\\Microsoft\\Driver Signing",
                        0,
                        KEY_WRITE,
                        &hkey
                        )==ERROR_SUCCESS){
                printf("RegOpenKey sucess\n");
        }else{
                printf("RegOpenKey failure\n");
        };

        len=sizeof(seed);
        if(RegSetValueEx(
                        hkey,
                        "Policy",
                        0,
                        REG_BINARY,
                        &onoff,
                        1
                        )==ERROR_SUCCESS){
                printf("RegSetValueEx sucess\n");
        }else{
                printf("RegSetValueEx failure\n");
        };
        if(hkey)
                RegCloseKey(hkey);

        //--------------------------------------------------------------------
        // HKLM\Software\Microsoft\Driver Signing\Policy
        if(RegOpenKeyEx(
                        HKEY_LOCAL_MACHINE,
                        "Software\\Microsoft\\Driver Signing",
                        0,
                        KEY_WRITE,
                        &hkey
                        )==ERROR_SUCCESS){
                printf("RegOpenKey sucess\n");
        }else{
                printf("RegOpenKey failure\n");
        };

        len=sizeof(seed);
        if(RegSetValueEx(
                        hkey,
                        "Policy",
                        0,
                        REG_BINARY,
                        &onoff,
                        1
                        )==ERROR_SUCCESS){
                printf("RegSetValueEx sucess\n");
        }else{
                printf("RegSetValueEx failure\n");
        };
        if(hkey)
                RegCloseKey(hkey);

        exit(0);
}


Во вложении - скомпилированная утилита, которая корректно устанавливает нужный параметр (проверено на XP и 2003). Пригодится всем, кто имеет дело с установкой драйверов - утилиту достаточно запустить перед установкой неподписанного драйвера и он установится молча, т. к. выбор политики сработает мгновенно.

Berline 19-06-2008 14:09 830045

Вопрос: можно ли как нибуть орагнизовать запуск утилитки "после 1й автозагрузки"? К примеру из RunOnceEx поставили всё что нам нужно, он перегрузился, и типа при первом "чистом" логоне запустилась прога, и в этот сеанс мы ставим дровишки...

simplix 19-06-2008 14:29 830067

Вложений: 1
Можно элементарно сделать аддон, который запустит программку на T13 и после этого можно ставить свои драйвера.

Berline 19-06-2008 14:45 830081

simplix, наверн я не пральн понял... достаточно однократного запуска программы, и в дальнейшем всё будет тип топ?
или нужно каждый раз в текущем сеансе запускать утилиту?

yurfed 19-06-2008 14:50 830085

Цитата:

Цитата simplix
Установка неподписанных драйверов »

А чем не нравится средство диагностики "dxdiag", при запуске ответить нет и убрать птичку на отмеченом красным? Зачем огород городить?

Berline 19-06-2008 15:07 830104

yurfed, dxdiag - лишние телодвижения... PrivateHash - ни консольных окон, ни диалогов не понятных! Имхо...

simplix 19-06-2008 15:24 830114

Цитата:

Цитата Berline
достаточно однократного запуска программы »

Да.

yurfed, Вас не туда занесло, параметр находится здесь:
Свойства системы => Оборудование => Подписывание драйверов


yurfed 19-06-2008 15:36 830119

simplix, ну да, немного не туда нажал, но и то, что сказал, тоже, снимает проверку.
Цитата:

Цитата Berline
PrivateHash - ни консольных окон, ни диалогов не понятных! Имхо... »

Про какие консольные окна речь?

Berline 19-06-2008 15:41 830129

yurfed, сие было приведено в пример образно... :tongue:

simplix 19-06-2008 15:42 830130

Цитата:

Цитата yurfed
но и то, что сказал, тоже, снимает проверку »

Это вообще из другой песни и к теме не имеет отношения...

Речь о том, что документированно нельзя управлять этим чекбоксом программно. То есть уже можно...

Mr dUSHA 19-06-2008 17:55 830312

Цитата:

Цитата simplix
Можно элементарно сделать аддон, который запустит программку на T13 и после этого можно ставить свои драйвера.

Речь о том, что документированно нельзя управлять этим чекбоксом программно. То есть уже можно...
»

Для автоустановки можно просто прописать соответствующие параметры в winnt.sif. Эффект будет аналогичный.
А этот исходник наш BoaSoft давно уже с успехом применяет в своем проекте по интеграции драйверов. :-)

Кроме того о других методах политикой чеерез недокументированую функцию pGetRealSystemTime смотрите здесь
http://forum.oszone.net/thread-106849.html

simplix 19-06-2008 18:13 830333

Цитата:

Цитата Mr dUSHA
Для автоустановки можно просто прописать соответствующие параметры в winnt.sif »

А если нужно будет установить драйвер на установленной системе или во время обычной установки? Нужна универсальность, а т. к. размера у файла практически нету, то его можно применять в любом удобном случае (непосредственно перед установкой драйвера) - и всё будет корректно.
Цитата:

Цитата Mr dUSHA
А этот исходник наш BoaSoft давно уже с успехом применяет в своем проекте по интеграции драйверов. »

Исходнику уже больше 4-х лет, надыбал его на просторах гугля )) А вот утилиты такой нигде не видел, теперь будет.

_AJ_ 05-05-2011 21:38 1670912

Вложений: 1
Цитата:

Цитата simplix
yurfed, Вас не туда занесло, параметр находится здесь:
Свойства системы => Оборудование => Подписывание драйверов »

простите, уточните версию win 7. у меня в профессиональной нет подписывания

SOLON7 05-06-2011 16:20 1688815

Использую для установки драйверов следующие функции
UpdateDriverForPlugAndPlayDevicesA
DriverPackageInstallA

1.Возможно будет установить Неподписанные дрова с этой тулзой ??
2.На 2k,xp,6,7 ???

q28q 02-08-2011 16:42 1724636

Вложений: 1
Отличная идея,все дрова ставятся. Но почемуто не работает удаленно через psexec, а хотелось бы.


Ошибка: 0x80090016L The provider DLL file does not exist or is not on the current path. И я думаю это не правдивая информация об ошибке, прога ни пытается открывать нестандартные dll.


И уже я разабрался, если такая ошибка то нужно выполнить CryptAcquireContext еще раз с параметром CRYPT_NEWKEYSET

Прикрепил исправленую версию

Freddy1984 28-03-2012 20:37 1888782

Здравствуйте! Скажите пожалуйста, данная утилита может заменить WatchDriverSigningPolicy?
Почему спрашиваю? Потому что WatchDriverSigningPolicy переодически не срабатывает, и появляется окно о предупреждении о неподписанных драйверах.

the_doom 28-03-2012 22:04 1888850

делал подобный по назначению скрипт на Sign of misery, который искал окно по заголовку и нажимал в нем Yes. только для русской\английской\64битной winxp пришлось писать разные версии, тк текст сообщений везде разный. надеюсь эта прога заменит те скрипты. потестю как оно.

Guman 18-06-2012 11:37 1936191

simplix, что скажеш насчет версии от q28q
Цитата:

Цитата q28q
Отличная идея,все дрова ставятся. Но почемуто не работает удаленно через psexec, а хотелось бы.
Ошибка: 0x80090016L The provider DLL file does not exist or is not on the current path. И я думаю это не правдивая информация об ошибке, прога ни пытается открывать нестандартные dll.
И уже я разабрался, если такая ошибка то нужно выполнить CryptAcquireContext еще раз с параметром CRYPT_NEWKEYSET
Прикрепил исправленую версию
Вложения
ph.7z
(1.5 Kb, 27 просмотров) »

Это исправление или наоборот.... какой версие пользоваться твоей или же его

rensaid 03-12-2015 23:08 2581223

Установил драйвер на Windows XP 64 для принтера HP LaserJet 1010 от Widows Vista 64, потому что другого нет. Но я не помню, как это сделал. Благополочно забыл и не могу вспомнить. При установке программа упорно завирает, будто бы мой драйвер не предназначен для 64-битных процессоров.
Кажется, ставил Iorbit Driver под семёркой, делал инсталлятор для этого драйвера и потом устанавливал его под XP. Но мне кажется, что должен быть способ проще. Есть соображения? Еще подходит универсальный драйвер от HP, но я точно помню, что печатал драйвером Висты.


Время: 08:08.

Время: 08:08.
© OSzone.net 2001-