我正在使用CreateFile,如下所示,并且一直在获取isInvalid = true,没有做任何事情,但是,“ Marshal.GetLastWin32Error”返回的错误代码根据我尝试访问的路径而变化。

这是路径及其相应的错误代码:


@lpFileName =“ c:\”-> 3
@lpFileName =“ \\ 127.0.0.1 \ share \”->
123
@lpFileName =“ c:\ share \”-> 5


显然“ c:\”确实存在,据我所知“ \\ 127.0.0.1 \ share \”是有效的UNC
我将目标计算机上的每个人(包括NTFS和共享)都享有一切可能的权利。
这些都没有道理。

我的系统是Server 2008R2
请帮助。

创建文件:

[DllImport("kernel32.dll", SetLastError = true)]
    static extern SafeFileHandle CreateFile(
        LPCTSTR lpFileName,
        DWORD dwDesiredAccess,
        DWORD dwShareMode,
        LPSECURITY_ATTRIBUTES lpSecurityAttributes,
        DWORD dwCreationDisposition,
        DWORD dwFlagsAndAttributes,
        HANDLE hTemplateFile
        );


带有以下标志:

DWORD dwIoControlCode,
        LPCTSTR lpFileName,
        DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE,
        DWORD dwShareMode = FILE_SHARE_WRITE|FILE_SHARE_READ,
        LPSECURITY_ATTRIBUTES lpSecurityAttributes = default(LPSECURITY_ATTRIBUTES),
        DWORD dwCreationDisposition = OPEN_EXISTING,
        DWORD dwFlagsAndAttributes = 0,
        HANDLE hTemplateFile = default(IntPtr)
        )


和标志值:

 public const DWORD
        GENERIC_READ = 0x80000000,
        GENERIC_WRITE = 0x40000000,
        FILE_SHARE_WRITE = 0x2,
        FILE_SHARE_READ = 0x1,
        OPEN_EXISTING = 0x3;

最佳答案

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx

CreateFile函数(Windows)

目录

要使用CreateFile打开目录,请在dwFlagsAndAttributes中指定FILE_FLAG_BACKUP_SEMANTICS标志。

10-08 04:47