阅读:3646回复:4
请教关于FSCTL_GET_RETRIEVAL_POINTERS的问题,谢了!
先看代码:
#define WINVER 0x0501 #define _WIN32_WINNT 0x0501 #include <iostream> #include <windows.h> #include <tchar.h> #include <Winioctl.h> int main() { HANDLE hFile; DWORD dwRet = 0; hFile = CreateFile(_T("C:\\2.txt"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0); if (hFile != INVALID_HANDLE_VALUE) { STARTING_VCN_INPUT_BUFFER InBuf; RETRIEVAL_POINTERS_BUFFER OutBuf; DWORD dwBytesRet; InBuf.StartingVcn.QuadPart = 0; ZeroMemory(&OutBuf, sizeof(OutBuf)); DeviceIoControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, &InBuf, sizeof(InBuf), &OutBuf, sizeof(OutBuf), &dwBytesRet, NULL); dwRet = GetLastError(); CloseHandle(hFile); } return dwRet; } 当2.txt这个文件很小时,DeviceIoControl总是返回ERROR_HANDLE_EOF,但是当我增大2.txt到一定大小时,DeviceIoControl就成功了,而且再减小2.txt到原来的大小DeviceIoControl还是能执行成功,为什么呢???C盘为NTFS格式 |
|
最新喜欢:Leopar...
|
沙发#
发布于:2007-09-07 13:59
NTFS文件系统中,当文件很小时,这个文件会驻留在FILE_RECORD这个结构里,而不会给它分配簇来保存数据
所以使用FSCTL_GET_RETRIEVAL_POINTERS是得不到它的簇列表的 在WINHEX中选中此文件,点位置->簇列表,会告诉你该文件被存在了MFT里 可以通过遍历此文件的属性,找到NTFS_ATTRIBUTE_TYPE_DATA类型的驻留属性来得到该文件的数据 |
|
|
板凳#
发布于:2007-09-07 14:05
呵呵,楼主在研究那个机器狗病毒吧
|
|
|
地板#
发布于:2007-09-07 14:14
引用第2楼WQXNETQIQI于2007-09-07 14:05发表的 : !!!!!!!!!死咯~~这里也能碰到认识的人???你也在网盟逛????高手!!能否PM你Q给我~ |
|
|
地下室#
发布于:2007-09-07 15:05
- - 我只是最近抓到机器狗那个病毒的样本而已。。。
|
|
|