vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2003-02-13 11:59
忘了说, 我的意思是说,对于根目录,即使是只有一个file,有时可能也不只有一个,我也不是说以那么目录名来做判断是不是根目录的。

  对于U般,未测试,这两天忙,可能帮不了你。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
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;
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2003-02-13 13:32
to: zhangyl
很抱歉,我上班不能用QQ,MSN
rsman
驱动小牛
驱动小牛
  • 注册日期2003-01-14
  • 最后登录2016-01-22
  • 粉丝0
  • 关注0
  • 积分969分
  • 威望101点
  • 贡献值0点
  • 好评度92点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2003-02-14 10:40
 这代码没有考虑根目录,隐藏文件是链中的最后一个,你还要根据我的方式改进。

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;
 


这段代码是在完成例程里处理吗?
rsman
rsman
驱动小牛
驱动小牛
  • 注册日期2003-01-14
  • 最后登录2016-01-22
  • 粉丝0
  • 关注0
  • 积分969分
  • 威望101点
  • 贡献值0点
  • 好评度92点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2003-02-16 23:46
 这代码没有考虑根目录,隐藏文件是链中的最后一个,你还要根据我的方式改进。

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;
 

ApcHookHideFile是在完成例程里调用的吗?
rsman
yuanyuan
驱动大牛
驱动大牛
  • 注册日期2003-01-15
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分1025分
  • 威望300点
  • 贡献值0点
  • 好评度232点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2003-02-22 21:41
请问:lists.osr.com这个网站的全网址是什么?我怎么进不去!
thecxj
驱动牛犊
驱动牛犊
  • 注册日期2002-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2003-12-29 14:21
这段代码关键就是根目录处理
云中漫步1977
上一页 下一页
游客

返回顶部