J'ai un problème étrange avec l'application que je suis en train d'écrire. Je suis à peu près sûr que je n'ai rien changé récemment au code ci-dessous, mais de toute façon ça a cessé de fonctionner. Au fait. J'utilise:Appelez du code non géré à partir de C#. Obtenir des données à l'aide IntPtr
[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern uint NetShareGetInfo(
string servername,
string netname,
int level,
out IntPtr ppBuf
);
Pour importer netapi32.dll. J'ai besoin de chemin physique. WMI et WinRM ne peuvent pas être utilisés. Ensuite, je dois ENUM et struct comme ci-dessous:
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;
}
tous dans
[SuppressUnmanagedCodeSecurity]
public static class SafeNativeMethods
classe selon analyseur de code VS. Je l'appelle avec:
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));
après l'exécution de code ci-dessus, je ne reçois pas d'erreurs ou des exceptions, toutefois, Siget a seulement Struct première lettre de chaque valeur de la propriété. Où pourrait être le problème?
Voir ce pour la déclaration de SHARE_INFO_502: http://www.pinvoke.net/default.aspx/Structures.SHARE_INFO_502 – PaulF