0

基本的な 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-linkmicrosoft-link )

どんな助けや提案も大歓迎です!

4

1 に答える 1