在一個相對較新的XP(SP3)安裝中,我收到了來自MsiEnumProductsEx
(來自msi.lib)調用的奇怪結果。這裏是我的代碼:MsiEnumProductsEx返回ERROR_MORE_DATA而不做任何事
TCHAR userId[8] = _T("s-1-1-0");
UINT result;
index = 0;
TCHAR szInstalledProductCode[39];
TCHAR szSid[40];
MSIINSTALLCONTEXT context;
DWORD numChars = 40;
MSIINSTALLCONTEXT context;
result = MsiEnumProductsEx(NULL, userId, MSIINSTALLCONTEXT_ALL, index, szInstalledProductCode, &context, (LPTSTR)szSid, &numChars);
這個函數調用後,所有的輸出變量保持不變;即szInstalledProductCode
,szSid
,context
和numChars
保持不變;通過實際給予他們虛擬值並查看它們未被覆蓋來測試。此外,result
設置爲234;這通常表示緩衝區太小,我需要傳入更大的緩衝區;應該用這個大小來填充numChars
變量。但是,如前所述,numChars與之前的版本(40)保持完全一致,因此再次調用具有相同大小(加上一個用於空終止)的方法與第一次沒有什麼不同。
當我在其他機器上運行這個相同的代碼時,它的行爲完全如何,文檔說它應該表現 - 填充所有變量,包括szSid
直到它的緩衝區長度;如果緩衝區太小,則返回ERROR_MORE_DATA
並填充numChars
以適當的大小。
所以我能想到的是這個Windows的安裝程序在某種程度上被破壞了,但我們需要了解Windows中特別錯誤的根本原因。任何人都可以給我指導;即使這只是某些調查途徑?
類似但不同的奇怪的東西:http://blog.iswix.com/2011/11/curious-case-of-corrupted-characters.html –