我正在开发一种微型机。我检查硬盘(即D:)上的新文件创建(通过拖放)。我的工作如下:
isNewFile = FALSE;
if (Data
&& Data->Iopb
&& (Data->Iopb->MajorFunction == IRP_MJ_CREATE))
{
// Get create disposition
createDisposition = (Data->Iopb->Parameters.Create.Options >> 24) & 0x000000FF;
// Check if new file is creating or not
isNewFile = ((FILE_SUPERSEDE == createDisposition)
|| (FILE_CREATE == createDisposition)
|| (FILE_OPEN_IF == createDisposition)
|| (FILE_OVERWRITE == createDisposition)
|| (FILE_OVERWRITE_IF == createDisposition));
// Write log
PT_DBG_PRINT( PTDBG_TEST_STATUS,
("isNewFile %d--createDisposition: <%08x>\n",
isNewFile,
createDisposition));
}create选项的值
//
// Define the create disposition values at wdm.h
//
#define FILE_SUPERSEDE 0x00000000
#define FILE_OPEN 0x00000001
#define FILE_CREATE 0x00000002
#define FILE_OPEN_IF 0x00000003
#define FILE_OVERWRITE 0x00000004
#define FILE_OVERWRITE_IF 0x00000005
#define FILE_MAXIMUM_DISPOSITION 0x00000005- isNewFile 1--createDisposition: <0x00000002>
- isNewFile 0--createDisposition: <0x00000001>
,有什么问题吗?
谢谢大家。
发布于 2015-02-28 13:56:37
关于拖放,如果这种情况发生在相同的卷内,它会以重命名的形式通过FltSetInformationFile。但是,如果卷是不同的,那么它将复制创建的新文件@目标文件内容。您可以使用像普鲁蒙这样的工具检查这种行为。
https://stackoverflow.com/questions/28336334
复制相似问题