【发布时间】:2011-12-04 08:53:12
【问题描述】:
我正在使用 FileRead API。 我使用的是 Windows 7 x64,我的代码运行良好且正确。 现在我安装了新的 Windows 7 x86 和 VS2008 teamsuit 和 .NET 2、3+SP1+SP2、3.5、3.5.1。 我以管理员身份运行代码,但仍然遇到以下错误:
AccessViolationException(试图读取或写入受保护的内存。这通常表明其他内存已损坏。)
int nread = 0;
uint handle;
byte[] buff = new byte[1024];
string driveRoot = string.Concat("\\\\.\\", driveLetter);
uint hRoot = CreateFile(driveRoot,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
IntPtr.Zero,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
IntPtr.Zero);
if (hRoot != -1)
handle = ReadFile(hRoot, buff, 1024, nread, new System.Threading.NativeOverlapped());
【问题讨论】:
-
您的 HANDLE 应该是 IntPtr 但这在 x86 上不会有问题。不过在 x64 上应该是个问题。 nread 也作为指针传递,你传递的是一个 uint。也应该是一个 IntPtr。
标签: c# .net windows winapi pinvoke