20楼#
发布于:2003-02-13 11:59
忘了说, 我的意思是说,对于根目录,即使是只有一个file,有时可能也不只有一个,我也不是说以那么目录名来做判断是不是根目录的。
对于U般,未测试,这两天忙,可能帮不了你。 |
|
21楼#
发布于:2003-02-13 13:13
这代码没有考虑根目录,隐藏文件是链中的最后一个,你还要根据我的方式改进。
purpose: hide C:\\Apc\\TestH VOID ApcHookHideFile( PIRP Irp, PIO_STACK_LOCATION currentIrpStack ) { PFILE_BOTH_DIR_INFORMATION QueryBuffer = NULL; ULONG offset = 0; ULONG currentPosition = 0; ULONG bufferLength = currentIrpStack->Parameters.QueryFile.Length; ULONG NewLength = 0; WCHAR fileNameToRemove[] = L\"TestH\"; PUCHAR startEntryToRemove = NULL; PUCHAR startNextEntry = NULL; NewLength = bufferLength; QueryBuffer = (PFILE_BOTH_DIR_INFORMATION) Irp->UserBuffer; if( QueryBuffer->NextEntryOffset > bufferLength ) return; do { offset = QueryBuffer->NextEntryOffset; DebugPrint( ( \"HookRoutine : QUERY_DIR : TestH - ws 0xd\\n\", QueryBuffer->FileName, QueryBuffer->NextEntryOffset ) ); if( wcsncmp(QueryBuffer->FileName, fileNameToRemove, 5 ) == 0 ) { startEntryToRemove = (PUCHAR) QueryBuffer; startNextEntry = (PUCHAR) QueryBuffer + offset; RtlMoveMemory( startEntryToRemove, startNextEntry, bufferLength - currentPosition - offset ); NewLength -= offset; break; } currentPosition += offset; QueryBuffer = (PFILE_BOTH_DIR_INFORMATION) ( (PUCHAR) QueryBuffer + offset ); } while( offset != 0 ); Irp->IoStatus.Information = NewLength; } case IRP_MJ_DIRECTORY_CONTROL: if( currentIrpStack->MinorFunction == IRP_MN_QUERY_DIRECTORY ) { if( strncmp( fullPathName, \"C:\\\\0\", 3 ) == 0 ) { ApcHookHideFile( Irp, currentIrpStack ); } } break; |
|
22楼#
发布于:2003-02-13 13:32
to: zhangyl
很抱歉,我上班不能用QQ,MSN |
|
23楼#
发布于:2003-02-14 10:40
这代码没有考虑根目录,隐藏文件是链中的最后一个,你还要根据我的方式改进。 这段代码是在完成例程里处理吗? |
|
|
24楼#
发布于:2003-02-16 23:46
这代码没有考虑根目录,隐藏文件是链中的最后一个,你还要根据我的方式改进。 ApcHookHideFile是在完成例程里调用的吗? |
|
|
25楼#
发布于:2003-02-22 21:41
请问:lists.osr.com这个网站的全网址是什么?我怎么进不去!
|
|
26楼#
发布于:2003-12-29 14:21
这段代码关键就是根目录处理
|
|
|
上一页
下一页