WinVerifyTrust API problem

Posted by Shayan on Stack Overflow See other posts from Stack Overflow or by Shayan
Published on 2010-04-08T10:45:04Z Indexed on 2010/04/10 8:03 UTC
Read the original article Hit count: 1307

Filed under:
|
|
|

I'm using WinVerifyTrust API in windows XP and I don't want any kind of user interaction. But when I set the WTD_UI_NONE attribute, although it doesn't show any dialog boxes, but it waits for a long time on the files that in fact wanted user interaction (I mean files which without mentioning the NO UI it will ask the user for that file).

This is my code:

    WINTRUST_FILE_INFO FileData;
memset(&FileData, 0, sizeof(FileData));
FileData.cbStruct = sizeof(WINTRUST_FILE_INFO);
wchar_t fileName[32769];
FileData.pcwszFilePath = fileName;
FileData.hFile = NULL;
FileData.pgKnownSubject = NULL;

/*
WVTPolicyGUID specifies the policy to apply on the file
WINTRUST_ACTION_GENERIC_VERIFY_V2 policy checks:

1) The certificate used to sign the file chains up to a root 
certificate located in the trusted root certificate store. This 
implies that the identity of the publisher has been verified by 
a certification authority.

2) In cases where user interface is displayed (which this example
does not do), WinVerifyTrust will check for whether the  
end entity certificate is stored in the trusted publisher store,  
implying that the user trusts content from this publisher.

3) The end entity certificate has sufficient permission to sign 
code, as indicated by the presence of a code signing EKU or no 
EKU.
*/

GUID WVTPolicyGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2;
WINTRUST_DATA WinTrustData;

// Initialize the WinVerifyTrust input data structure.

// Default all fields to 0.
memset(&WinTrustData, 0, sizeof(WinTrustData));

WinTrustData.cbStruct = sizeof(WinTrustData);

// Use default code signing EKU.
WinTrustData.pPolicyCallbackData = NULL;

// No data to pass to SIP.
WinTrustData.pSIPClientData = NULL;

// Disable WVT UI.
WinTrustData.dwUIChoice = WTD_UI_NONE;

// No revocation checking.
WinTrustData.fdwRevocationChecks = WTD_REVOKE_NONE; 

// Verify an embedded signature on a file.
WinTrustData.dwUnionChoice = WTD_CHOICE_FILE;

// Default verification.
WinTrustData.dwStateAction = 0;

// Not applicable for default verification of embedded signature.
WinTrustData.hWVTStateData = NULL;

// Not used.
WinTrustData.pwszURLReference = NULL;

// Default.
WinTrustData.dwProvFlags = WTD_REVOCATION_CHECK_END_CERT;

// This is not applicable if there is no UI because it changes 
// the UI to accommodate running applications instead of 
// installing applications.
WinTrustData.dwUIContext = 0;

// Set pFile.
WinTrustData.pFile = &FileData;

// WinVerifyTrust verifies signatures as specified by the GUID 
// and Wintrust_Data.
lStatus = WinVerifyTrust(
    (HWND)INVALID_HANDLE_VALUE,
    &WVTPolicyGUID,
    &WinTrustData);
printf("%x\n", lStatus);

© Stack Overflow or respective owner

Related posts about winverifytrust

Related posts about api