私が現在書いているアプリケーションに奇妙な問題があります。私は最近、以下のコード内で何も変更していないと確信していますが、何とかそれは動作を停止しました。 ポイントまで。 私が使用しています:C#からアンマネージコードを呼び出します。 IntPtrを使用してデータを取得する
[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern uint NetShareGetInfo(
string servername,
string netname,
int level,
out IntPtr ppBuf
);
をNETAPI32.DLLをインポートするには。私は物理的な道が必要です。 WMIとWinRMは使用できません。 そしてIは、以下のように列挙型と構造体を有する:
public enum ShType
{
DiskTree = 0,
PrintQ = 1,
Device = 2,
IPC = 3,
Temporary = 0x40000000,
Special = unchecked((int)0x80000000)
}
public struct SHARE_INFO_502
{
public string Name;
public ShType Type;
public string Remark;
public int Permissions;
public int MaxUses;
public int CurrentUses;
public string Path;
public string PassWd;
public int reserved;
public IntPtr SecDescriptor;
}
全て
[SuppressUnmanagedCodeSecurity]
public static class SafeNativeMethods
クラス内のVSコードアナライザに記載の方法。私はそれを呼び出す :上記のコード実行した後に、私はエラーまたは例外を受信しません
IntPtr ptrGet;
var resGetInfo = SafeNativeMethods.NetShareGetInfo("server_name", "share_name", 502, out ptrGet);
SafeNativeMethods.SHARE_INFO_502 siGet = (SafeNativeMethods.SHARE_INFO_502)Marshal.PtrToStructure(ptrGet, typeof(SafeNativeMethods.SHARE_INFO_502));
は、しかし、siGet構造体は、各プロパティの値の最初の文字だけを持っています。 どこに問題がありますか?
はSHARE_INFO_502の宣言のためにこれを参照してください:http://www.pinvoke.net/default.aspx/Structures.SHARE_INFO_502 – PaulF