基本的な MSI InstallShield コードから Advapi32.LsaOpenPolicy() を呼び出そうとしています。他の avdapi32.dll メソッドの呼び出しに成功しました。しかし、LsaOPenPolicy はタイプの不一致エラーをスローしています。
私のプロトタイプは次のとおりです。
prototype INT Advapi32.LsaOpenPolicy(POINTER, POINTER, INT, POINTER);
ウィンドウの定義は次のとおりです。
NTSTATUS LsaOpenPolicy(
_In_ PLSA_UNICODE_STRING SystemName,
_In_ PLSA_OBJECT_ATTRIBUTES ObjectAttributes,
_In_ ACCESS_MASK DesiredAccess,
_Inout_ PLSA_HANDLE PolicyHandle
);
C++ サンプルで、ObjectAttriibute 構造がゼロに設定されていることに注意しました。そこで、InstallShield コードで同様の処理を行います。pArray は配列の内容を指します。
for i = 0 to 11
array(i) = 0;
endfor;
array(0) = 24;
// current error is 80020005 type mismatch.
try
i = POLICY_CREATE_ACCOUNT | POLICY_LOOKUP_NAMES;
pArray = array;
pPolicy = NULL;
nvOSResult = LsaOpenPolicy(NULL, pArray, i, pPolicy);
catch
Sprintf(errString, "0x%08x", Err.Number);
_Logger(hMSI, methodName, "LsaOpenPolicy Exception "+errString, INFORMATION, FALSE);
nvOSResult = Err.Number;
endcatch;
スローされた 80020005 エラー以外の情報はあまりありません。いくつかの異なる引数の構成を試しましたが、これを乗り越えることができません。
これをフレクセラとマイクロソフトのフォーラムに投稿しましたが、そこには何の関心もありませんでした。(後世の参考文献: flexera-link、microsoft-link )
どんな助けや提案も大歓迎です!