以下に示すように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と共有の両方のターゲットコンピューター上のすべてのユーザーに可能な限りの権利を与えました。それらのどれも意味がありません。
私のシステムはServer2008R2ヘルプをお願いします。
CreateFile:
[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;