解決安裝驅動時提示的“未簽名的驅動程式”警告資訊!!

iteye_8623發表於2004-07-01

最近編寫驅動,並作了個安裝程式。但是發現在安裝時總是有“未數字簽名的驅動”這個警告。只有手動將 系統—〉硬體-〉簽署裝置驅動程式 中的檔案簽名驗證改為“忽略”,就不會出現這個提示框。可是不知道在登錄檔中哪個位置,在網上搜集了一些資料,最後在“驅動開發網”找到了相關的文章,就是修改HKEY_LOCAL_MACHINE下的Software//Microsoft//Driver Signing和Software//Microsoft//Non-Driver Signing//這連個鍵下的Policy ,將值改 0 即可!我經過測試,發現在我機器上還是出現了提示!!我想是否是在當前使用者的登錄檔下呢?結果發現在KEY_CURRENT_USER下果然還有一個Software//Microsoft//Driver Signing鍵!!將值改為0 後!通過!!!

以下是InstallShield的安裝指令碼!^_^

//全域性變數儲存狀態值

STRING g_svDriverSigning, g_svNonDriverSigning, g_svUserDriverSigning;
NUMBER g_nvSize, g_nvUserSize, g_nvNonSize;
/*
未簽名的驅動程式安裝操作
0 預設繼續
1 允許安裝但發出警告
2 禁止安裝
*/
function NonDriverSigning(bEnable)
STRING szKey, svValue, szValue;
STRING szKeyName;
NUMBER nvType,nvSize;
begin
RegDBSetDefaultRoot( HKEY_CURRENT_USER );
//---------------------------------------
//設定HKCU下的未簽名的驅動程式安裝操作
szKey = "Software////Microsoft////Driver Signing////";
szKeyName = "Policy";
nvType = REGDB_NUMBER;

if ( bEnable ) then
//儲存原值
if ( RegDBGetKeyValueEx( szKey, szKeyName, nvType, g_svUserDriverSigning,
g_nvUserSize ) < 0 ) then
g_svUserDriverSigning = "0";
g_nvUserSize = -1;
endif;
//設定為"預設繼續"
szValue = "0";
nvSize = -1;
else
//恢復原值
szValue = g_svUserDriverSigning;
nvSize = g_nvUserSize;
endif;

//設定鍵值
if (RegDBSetKeyValueEx ( szKey , szKeyName , nvType , szValue ,
nvSize ) < 0) then
//return -1;
;
endif;

RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE);
//---------------------------------------
//設定HKLM下的未簽名的驅動程式安裝操作
szKey = "Software////Microsoft////Driver Signing////";
szKeyName = "Policy";
nvType = REGDB_BINARY;

if ( bEnable ) then
//儲存原值
if ( RegDBGetKeyValueEx( szKey, szKeyName, nvType, g_svDriverSigning,
g_nvSize ) < 0 ) then
g_svDriverSigning = "/0/0/0/0";
g_nvSize = 4 ;
endif;

//設定為"預設繼續"
szValue = "/0/0/0/0";
nvSize = 4;
else
//恢復原值
szValue = g_svDriverSigning;
nvSize = g_nvSize;
endif;

//設定鍵值
if (RegDBSetKeyValueEx (szKey, szKeyName, REGDB_BINARY, szValue,
nvSize) < 0) then
return -1;
endif;

//---------------------------------------
//設定HKLM下的未簽名的非驅動程式安裝操作
szKey = "Software////Microsoft////Non-Driver Signing////";
szKeyName = "Policy";
nvType = REGDB_BINARY;

if ( bEnable ) then
//儲存原值
if ( RegDBGetKeyValueEx( szKey, szKeyName, nvType, g_svNonDriverSigning,
g_nvNonSize ) < 0 ) then
g_svNonDriverSigning = "/0/0/0/0";
g_nvNonSize = 4;
endif;

//設定為"預設繼續"
szValue = "/0/0/0/0";
nvSize = 4;
else
//恢復原值
szValue = g_svNonDriverSigning;
nvSize = g_nvNonSize;
endif;

//設定鍵值
if (RegDBSetKeyValueEx (szKey, szKeyName, REGDB_BINARY, szValue,
nvSize) < 0) then
return -1;
endif;

return 0;
end;

相關文章