0

NetApi32 dll から NetServerEnum 関数を使用しようとしていますが、エラー コード 5: "アクセスが拒否されました" しか表示されません。以下は、外部 dll 関数への私の呼び出しです。

NetError nEr;
SERVER_TYPE type = SERVER_TYPE.SV_TYPE_WORKSTATION | SERVER_TYPE.SV_TYPE_SERVER; // SV_TYPE_WORKSTATION = 0x00000001 and SV_TYPE_SERVER = 0x00000002
IntPtr bufPtr;
uint entriesread;
uint totalentries;
UInt32 resume_handle_value = 0;
uint MAX_PREFERRED_LENGTH = 0xFFFFFFFF;

nEr = (NetError)NetServerEnum(null, 100, out bufPtr, MAX_PREFERRED_LENGTH, out entriesread, out totalentries, (uint)type, null, ref resume_handle_value);

if (nEr != NetError.NERR_Success)
{
    NetApiBufferFree(bufPtr);
    throw new InvalidOperationException(nEr);//Throws here with error code 5 -> "Access was denied."
}

関数は次のように宣言されています。

[DllImport("Netapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern int NetServerEnum([MarshalAs(UnmanagedType.LPWStr)]string servername, uint level, out IntPtr bufptr, uint prefmaxlen, out uint entriesread, out uint totalentries, uint servertype, [MarshalAs(UnmanagedType.LPWStr)]string domain, ref uint resume_handle);

ドメイン名を関数呼び出しに追加して、別の情報レベルで呼び出してみましたが、どちらも機能しませんでした。

関数のマイクロソフト ドキュメントへのリンクは次のとおりです

この関数呼び出しには特定の権利セットが必要ですか? ここで明らかに何かが欠けていますが、何がわかりません。

4

1 に答える 1

1

同様の問題に対する答えを探している未来の人のために、私はそれを理解しました.

ドメインの「Domain Admins」グループに属していない Active Directory ドメイン管理者アカウントになりすました。「Domain Admins」のメンバーとして管理者アカウントを追加すると、問題が解決しました。

つまり、これは権利の問題でした。「MY-PC\Administrators」に「MY-DOMAIN\Domain Admins」が含まれていることがわかったので、ローカル コンピューターのアカウント管理システムとセキュリティ設定に関係していると推測しています。

于 2016-09-02T13:51:18.437 に答える