比較的新しいXP(SP3)インストールで、MsiEnumProductsEx
(msi.libから)への呼び出しから奇妙な結果が得られます。これが私のコードです:
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に設定されています。これは通常、szSid
バッファーが小さすぎること、およびより大きなバッファーを渡す必要があることを示しています。numChars
変数はこのサイズで埋める必要があります。ただし、前述のように、numCharsは以前(40)とまったく同じままであるため、同じサイズ(およびnull終了の場合は1)でメソッドを再度呼び出すと、最初の場合と何ら変わりはありません。
これと同じコードを他のマシンで実行すると、ドキュメントに記載されているとおりに動作しますszSid
。バッファ長までを含むすべての変数が入力されます。バッファが小さすぎる場合は、戻って適切なサイズERROR_MORE_DATA
で埋めます。numChars
したがって、私が考えることができるのは、このWindowsのインストールが何らかの理由で壊れているということだけですが、Windowsで特に間違っている原因の根本的な原因を理解する必要があります。誰かが私にガイダンスを与えることができますか?調査するのが特定の方法であるとしても?