阅读:13127回复:26
怎么解决安装驱动时提示的“没有找到数字签名”??
我用InstallShield制作了一个虚拟设备的安装程序!使用DEVCON安装!用是可以用!但每次都需要确认“没有找到数字签名”这个对话框!这是给客户的!我开始的想法是准备将系统,硬件中的签署驱动程序这个默认属性改为"忽略",然后再改为原始值,但没有找到注册表健!!!
那位大虾知道吗? |
|
最新喜欢:yushui... |
沙发#
发布于:2004-06-29 22:34
哈哈!搞定了!翻阅了各位大虾的文章!!!
修改3个注册表键值! System:Win2000 HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Driver Signing\\Policy的值改为0; 除此之外,HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Non-Driver Signing\\Policy的值要改为1。 HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Driver Signing\\Policy 这个键值改为1! 打工告成! :D |
|
板凳#
发布于:2004-06-30 09:13
xp可以吗?
|
|
地板#
发布于:2004-06-30 09:50
XP下还没测试!测试出来再贴出来! ;)
|
|
地下室#
发布于:2004-07-01 08:47
哈哈!搞定了!翻阅了各位大虾的文章!!! 应该是全部都修改成0: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing\Policy (键值改为0) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Non-Driver Signing\Policy (键值改为0) HKEY_CURRENT_USER\SOFTWARE\Microsoft\Driver Signing\Policy (键值改为0) 该方法在Win2000下有效,WinXP下Non-Driver Signing键的位置是每台机器都不一样的,比较难找。 |
|
|
5楼#
发布于:2004-07-02 08:30
好像打错了!! :D
|
|
6楼#
发布于:2004-07-04 15:43
XP下得也解决了!只要找到当前用户得SID!在HKEY_USER下得SID
\\SoftWare\\Microsoft\\Driver Signing\\Policy改为0!! 取SID得代码可以参照MSDN!!!!!!!!!!!!! |
|
7楼#
发布于:2004-07-07 09:56
请问怎么找到WinXP当前用户得SID?
|
|
8楼#
发布于:2004-07-08 11:35
extern "C" __declspec (dllexport) int WINAPI GetCurSid(LPTSTR lpszBuff )
{ #define MY_BUFSIZE 256 // all allocations should be dynamic HANDLE hToken; BYTE buf[MY_BUFSIZE]; PTOKEN_USER ptgUser = (PTOKEN_USER)buf; DWORD cbBuffer=MY_BUFSIZE; TCHAR szTextualSid[MY_BUFSIZE]; DWORD cchSid=MY_BUFSIZE; BOOL bSuccess; // // obtain current process token // if(!OpenProcessToken( GetCurrentProcess(), // target current process TOKEN_QUERY, // TOKEN_QUERY access &hToken // resultant hToken )) { //DisplayWinError( TEXT("OpenProcessToken"), GetLastError() ); return RTN_ERROR; } // // obtain user identified by current process' access token // bSuccess = GetTokenInformation( hToken, // identifies access token TokenUser, // TokenUser info type ptgUser, // retrieved info buffer cbBuffer, // size of buffer passed-in &cbBuffer // required buffer size ); // close token handle. do this even if error above CloseHandle(hToken); if(!bSuccess) { //DisplayWinError( TEXT("GetTokenInformation"), GetLastError() ); return RTN_ERROR; } // // obtain the textual representaion of the Sid // if(!GetTextualSid( ptgUser->User.Sid, // user binary Sid szTextualSid, // buffer for TextualSid &cchSid // size/required buffer )) { //DisplayWinError( TEXT("GetTextualSid"), GetLastError() ); return RTN_ERROR; } // display the TextualSid representation _tprintf( TEXT("Process Sid: %s\n"), szTextualSid ); strcpy( lpszBuff, szTextualSid ); return RTN_OK; } BOOL GetTextualSid( PSID pSid, // binary Sid LPTSTR TextualSid, // buffer for Textual representaion of Sid LPDWORD cchSidSize // required/provided TextualSid buffersize in TCHARs ) { PSID_IDENTIFIER_AUTHORITY psia; DWORD dwSubAuthorities; DWORD dwCounter; DWORD cchSidCopy; DWORD cchMaxLen; // // test if parameters passed in are valid, IsValidSid can not take // a NULL parameter // if(!pSid || !IsValidSid(pSid) || !TextualSid || !cchSidSize) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } // obtain SidIdentifierAuthority psia = GetSidIdentifierAuthority(pSid); // obtain sidsubauthority count dwSubAuthorities = *GetSidSubAuthorityCount(pSid); // // compute approximate buffer length // S-SID_REVISION- + identifierauthority + -subauthorities + NULL // cchMaxLen = 6 + 14 + (11 * dwSubAuthorities) + 1; // // check provided buffer length. // If not large enough, indicate proper size and setlasterror // if(*cchSidSize < cchMaxLen) { *cchSidSize = cchMaxLen; SetLastError(ERROR_INSUFFICIENT_BUFFER); return FALSE; } // // prepare S-SID_REVISION- // cchSidCopy = wnsprintf(TextualSid, cchMaxLen, TEXT("S-%lu-"), SID_REVISION ); // // prepare SidIdentifierAuthority // if ( (psia->Value[0] != 0) || (psia->Value[1] != 0) ) { cchSidCopy += wnsprintf(TextualSid + cchSidCopy, cchMaxLen - cchSidCopy, TEXT("0x%02hx%02hx%02hx%02hx%02hx%02hx"), (USHORT)psia->Value[0], (USHORT)psia->Value[1], (USHORT)psia->Value[2], (USHORT)psia->Value[3], (USHORT)psia->Value[4], (USHORT)psia->Value[5]); } else { cchSidCopy += wnsprintf(TextualSid + cchSidCopy, cchMaxLen - cchSidCopy, TEXT("%lu"), (ULONG)(psia->Value[5] ) + (ULONG)(psia->Value[4] << 8) + (ULONG)(psia->Value[3] << 16) + (ULONG)(psia->Value[2] << 24) ); } // // loop through SidSubAuthorities // for(dwCounter = 0 ; dwCounter < dwSubAuthorities ; dwCounter++) { cchSidCopy += wnsprintf(TextualSid + cchSidCopy, cchMaxLen - cchSidCopy, TEXT("-%lu"), *GetSidSubAuthority(pSid, dwCounter) ); } // // tell the caller how many chars we provided, not including NULL // *cchSidSize = cchSidCopy; return TRUE; } |
|
9楼#
发布于:2004-07-23 17:02
最好先把注册表中要修改的值读出并保存,驱动安装完后,再恢复回去。要不明明用户在控制面板中为防病毒设置成警告或阻止,你这一改,不恢复回去的话,可能会让用户的系统有感染病毒的危险。
|
|
10楼#
发布于:2004-07-23 17:25
肯定是要保存的!
这个在脚本里面都实现了!!! |
|
11楼#
发布于:2004-07-28 14:26
我怎么不行呢?(使用NSIS安装中间层驱动) 是不是设置各个键值的次序也很重要? 应该是按照什么次序? |
|
12楼#
发布于:2004-07-29 20:52
一点密技:)
这个是2k下的。 |
|
|
13楼#
发布于:2004-07-29 20:54
这个是xp下的。
在安装程序中检测os的版本后调用相应的程序,再安装你的driver就好了。 |
|
|
14楼#
发布于:2004-09-01 15:10
老大,佩服!
有没有源码?能否告知XP下如何把数字签名对话框调出来并设置成ignore? 这个是xp下的。 |
|
15楼#
发布于:2004-09-28 09:22
good good,
非常感谢,虽然还没亲自去试, 但是,大家的无私真是令人敬佩。 |
|
16楼#
发布于:2007-04-24 16:17
上述方法在 XP SP2 都失败了. 各位老大在 SP2 做了测试吗?
|
|
17楼#
发布于:2007-05-30 10:27
高手啊!
|
|
18楼#
发布于:2007-05-31 15:47
如果是这样啊,没有去到实质的应用,能不能做个应程序啊,添加到DRRIVER 中去,然后每次一的安装就不再有提示
|
|
|
19楼#
发布于:2007-07-08 17:02
在XP 下没有用吧
|
|
上一页
下一页