阅读:1592回复:2
求教:修改filespy中spycreate,禁止创建文件问题
LONG CreateDisposition = (pIrpSp->Parameters.Create.Options >> 24) & 0x000000ff;
DbgPrint("CreateDisposition = %d\n",CreateDisposition); if(CreateDisposition==FILE_CREATE||CreateDisposition==FILE_OPEN_IF ||CreateDisposition==FILE_OVERWRITE_IF) //if(CreateDisposition==FILE_OPEN) { status = STATUS_ACCESS_DENIED; Irp->IoStatus.Status = status; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); } 我想当符合过滤条件时,就禁止创建文件,但调试发现创建要过滤的文件时CreateDisposition总为FILE_OPEN(数值为1),不能够阻止创建;如果先创建个禁止创建的文件同名的文件夹,在其中创建文件时被禁止,此时CreateDisposition为FILE_CREATE,不知何故?按照网上的资料创建文件时if(CreateDisposition==FILE_CREATE||CreateDisposition==FILE_OPEN_IF ||CreateDisposition==FILE_OVERWRITE_IF) 这个判定应该满足呀!我用的xp操作系统,使用2000 free ddk编译的 ![]() |
|
沙发#
发布于:2007-01-10 16:55
我都郁闷半年了,现在if(CreateDisposition==FILE_OPEN)
这样进行判断的,谁能告诉我!谁能告诉我! |
|
板凳#
发布于:2007-01-12 16:41
你試試看,這是我寫的方式目前OK不知是否是你想要的~~
#define C_DISABLED_DELETE_ACCESS(x) (x)&0x80 // 禁止刪除 #define C_DISABLED_WRITE_ACCESS(x) (x)&0x40 // 可讀不可寫入檔案及目錄 #define C_DISABLED_READ_AND_WRITE_ACCESS(x) (x)&0x20 // 完全禁用 CreateDisposition = (pIrpStack->Parameters.Create.Options>> 24) & 0x000000ff; ... .. NTSTATUS wfCheckIORule( int option, int rule ) { // 禁止讀取及寫入 if( C_DISABLED_READ_AND_WRITE_ACCESS(rule) && ( option==FILE_CREATE || option==FILE_OPEN_IF || option==FILE_OVERWRITE_IF || option==FILE_SUPERSEDE || option==FILE_OPEN || option==FILE_OVERWRITE ) ) { return STATUS_SUCCESS; } // 可讀不可寫,包括不能建立目錄及任可型態的檔案 if( C_DISABLED_WRITE_ACCESS(rule) && ( option==FILE_CREATE || option==FILE_OPEN_IF || option==FILE_OVERWRITE_IF ) ) { return STATUS_SUCCESS; } return 0; } |
|