我正在使用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标志。