2012-05-23 61 views
0

該代碼在Vista/Win7上成功運行,但在win xp上失敗(返回ERROR_INVALID_PARAMETER)。互聯網上沒有關於這個問題的文檔。有人知道錯誤在哪裏嗎?謝謝。SetupVerifyInfFile爲windows xp返回ERROR_INVALID_PARAMETER(0x57)

QList<std::pair<int, int> > versions; 
versions << std::pair<int, int>(5, 0); 
versions << std::pair<int, int>(5, 1); 
versions << std::pair<int, int>(5, 2); 
versions << std::pair<int, int>(6, 0); 
versions << std::pair<int, int>(6, 1); 

QList<int> architectures; 
architectures << PROCESSOR_ARCHITECTURE_INTEL << PROCESSOR_ARCHITECTURE_AMD64; 

for (int i = 0; i < versions.count(); i++) 
{ 
    int major = versions[i].first; 
    int minor = versions[i].second; 

    for (int j = 0; j < architectures.count(); j++) 
    { 
     int arch = architectures[j]; 

     SP_INF_SIGNER_INFO_V2 signerInfo; 
     signerInfo.cbSize = sizeof(SP_INF_SIGNER_INFO_V2); 

     SP_ALTPLATFORM_INFO_V2 altPlatInfo; 
     altPlatInfo.cbSize = sizeof(SP_ALTPLATFORM_INFO_V2); 
     altPlatInfo.Platform = VER_PLATFORM_WIN32_NT; 
     altPlatInfo.MajorVersion = major; 
     altPlatInfo.MinorVersion = minor; 
     altPlatInfo.Flags = SP_ALTPLATFORM_FLAGS_VERSION_RANGE; 
     altPlatInfo.FirstValidatedMajorVersion = major; 
     altPlatInfo.FirstValidatedMinorVersion = minor; 
     altPlatInfo.ProcessorArchitecture = arch; 
     SP_INF_SIGNER_INFO_V2 signerInfo; 
     signerInfo.cbSize = sizeof(SP_INF_SIGNER_INFO_V2); 

     bool result = SetupVerifyInfFile((wchar_t*)package.infFilePath.utf16(), 0, &signerInfo); 

回答

0

我也無法得到UNICODE版本的SetupVerifyInfFile在XP上工作。 非Unicode版本正常工作。如果package.infFilePath僅包含ASCII ,則可以使用以下解決方法:

SP_INF_SIGNER_INFO_V2_A signerInfo; 
signerInfo.cbSize = sizeof(SP_INF_SIGNER_INFO_V2_A); 
bool result = SetupVerifyInfFileA(package.infFilePath.toUtf8(), 0, &signerInfo);