C# 调用Windows函数ReadFile()后,实际文件数据存储在哪里?
我正在使用Windows API函数ReadFile()读取系统元文件。但我所困惑的是如何实际处理从该函数返回的数据。我假设它存储在lpBuffer参数中,我需要解码该缓冲区的内容以解释实际数据 我正在运行Windows 10,并使用C#进行互操作调用 这是我的包装纸:C# 调用Windows函数ReadFile()后,实际文件数据存储在哪里?,c#,c++,ntfs,C#,C++,Ntfs,我正在使用Windows API函数ReadFile()读取系统元文件。但我所困惑的是如何实际处理从该函数返回的数据。我假设它存储在lpBuffer参数中,我需要解码该缓冲区的内容以解释实际数据 我正在运行Windows 10,并使用C#进行互操作调用 这是我的包装纸: [DllImport("kernel32", CharSet = CharSet.Auto)] public static extern bool ReadFile(SafeFileHandle hFile, IntPtr lp
[DllImport("kernel32", CharSet = CharSet.Auto)]
public static extern bool ReadFile(SafeFileHandle hFile, IntPtr lpBuffer, uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, ref NativeOverlapped lpOverlapped);
这是我的电话:
NativeMethods.ReadFile(_volumeHandle, (IntPtr)buffer, (uint)len, out read, ref overlapped)
//do something with the buffer???
调用后缓冲区中包含的数据是指向int的指针—这是我所期望的—但实际文件数据在哪里?您需要提供缓冲区。请参见lpbuffer应指向需要分配的实际缓冲区。。。您应该将其更改为
byte[]
,并将nNumberOfBytesToRead
指向您已读取的大小?为什么不简单地使用C#facility读取文件?@NeilButterworth,因为我正在尝试读取$SECURE文件,这是一个NTFS元文件。尝试使用C#函数(如File.ReadAllBytes())打开此文件返回访问拒绝错误……即使当我作为管理员登录到我的机器中并运行我的IDE时,管理员的权限也会提高。C++不具有C特权不具有的特殊特权。我将初始化缓冲区传递给函数调用:Unut-BuffelSt=(Environment.OSVersion.Version.Major>=6?256u:64u)*1024;字节[]数据=新字节[bufferSize];固定(字节*buffer=数据)