次のコード スニペットでは、WinVerifyTrust は、システムに読み込まれて実行されているカーネル ドライバー ファイル (.sys) に対して CERT_E_UNTRUSTEDROOT を返します。
GUID guidAction = DRIVER_ACTION_VERIFY;
WINTRUST_FILE_INFO sWintrustFileInfo = { 0 };
WINTRUST_DATA sWintrustData = { 0 };
HRESULT hr = 0;
sWintrustFileInfo.cbStruct = sizeof(WINTRUST_FILE_INFO);
sWintrustFileInfo.pcwszFilePath = argv[1];
sWintrustFileInfo.hFile = NULL;
sWintrustData.cbStruct = sizeof(WINTRUST_DATA);
sWintrustData.dwUIChoice = WTD_UI_NONE;
sWintrustData.fdwRevocationChecks = WTD_REVOKE_NONE;
sWintrustData.dwUnionChoice = WTD_CHOICE_FILE;
sWintrustData.pFile = &sWintrustFileInfo;
sWintrustData.dwStateAction = WTD_STATEACTION_VERIFY;
hr = WinVerifyTrust((HWND)INVALID_HANDLE_VALUE, &guidAction, &sWintrustData);
いくつかの興味深い点: - ドライバーは、SHA-256 を使用して有効な (購入した) 証明書で署名されています。- KB3033929 がシステムにインストールされている (Win7/32) - ファイルのプロパティから証明書を表示すると、証明書チェーン全体が有効であると表示される
WinVerifyTrust の呼び出しは間違っていますか?
別の質問: SHA-256 ベースのコード署名検証がターゲット システムで利用可能であることを (レジストリ キーなどの存在によって) 知る別の方法はありますか? (インストール中にこれを確認する必要があります...)
ありがとう :)