解决安装驱动时提示的“未签名的驱动程序”警告信息!!

最近编写驱动,并作了个安装程序。但是发现在安装时总是有“未数字签名的驱动”这个警告。只有手动将 系统—〉硬件-〉签署设备驱动程序 中的文件签名验证改为“忽略”,就不会出现这个提示框。可是不知道在注册表中哪个位置,在网上搜集了一些资料,最后在“驱动开发网”找到了相关的文章,就是修改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;

posted on 2004-07-01 08:34  王大王  阅读(1249)  评论(0编辑  收藏  举报

导航