【发布时间】:2013-03-18 06:56:17
【问题描述】:
我正在使用如下所示的 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;
【问题讨论】:
-
当您可以对托管代码执行相同操作时,为什么要保持无损?
-
我需要获取 UNC 的驱动器信息我只使用 CreateFile 来获取句柄
-
您需要什么样的信息?
-
这个问题很奇怪。
isInvalid是什么?进行调用的代码在哪里。这就是问题所在。