答复
当年我好像是从system.cpl 入手的,最后根据OD的反汇编翻译成C的,所以呢,几乎和MS原始的一样.
到了Vista64时代,06年10月吧,没办法了,只能申请数字签名了.现在都用数字签名了,省事,协安装dll也不再需要了.
DWORD dwSeed=2,dwSize=sizeof(DWORD);
RegCreateKey(HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\WPA\\PnP"),&hkey);
RegQueryValueEx(hkey,TEXT("seed"),0,NULL,(LPBYTE)&dwSeed,&dwSize);
RegCloseKey(hkey);
HCRYPTPROV hProv;
CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
HCRYPTHASH hHash;
CryptCreateHash(hProv,0x8003,NULL,NULL,&hHash);
DWORD dwSet=0x000;//忽略,0x100警告,0x200禁止
CryptHashData(hHash,(const BYTE *)&dwSet,4,0);
CryptHashData(hHash,(const BYTE *)&dwSeed,4,0);
#define HASHLEN 16
BYTE HashBuff[HASHLEN];
DWORD HashLen=HASHLEN;
CryptGetHashParam(hHash,HP_HASHVAL,HashBuff,&HashLen,0);
CryptDestroyHash(hHash);
RegCreateKey(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup"),&hkey);
SetB(hkey,TEXT("PrivateHash"),HashBuff,HASHLEN);
RegCloseKey(hkey);
