我正在使用如下所示的 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;