etre_liu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-04
  • 最后登录2004-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1961回复:8

急啊,老板让我写一个隐藏目录和文件的程序,无论怎么样都看不到,而且不能用cd进入,我在这里看了很多实现方法,不过我以前没有做过这方面的东西,不会,谁有相应的源代码给我看看啊,谢谢

楼主#
更多 发布于:2004-07-07 14:48
急啊,老板让我写一个隐藏目录和文件的程序,无论怎么样都看不到,而且不能用cd进入,我在这里看了很多实现方法,不过我以前没有做过这方面的东西,不会,谁有相应的源代码给我看看啊,谢谢!老板让我这周做过,我以产没有用过DDK之类的东西,什么都不会啊,那位大侠帮帮我吧,分可以在给.其他也可以的.只要不过份.

最新喜欢:

冰冷骨灰冰冷骨灰
etre_liu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-04
  • 最后登录2004-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-07 14:50
可以在nt,2000,xp,2003下运行,急啊,还有两天了,我一点头绪都没有.
我的邮件是eliu@visall.com
Duck_Chen
驱动牛犊
驱动牛犊
  • 注册日期2004-06-25
  • 最后登录2004-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-07 15:14
问一个问题先,你需要隐藏文件和目录的那台机器要经常添加和删除文件吗???
为什么非要隐藏,而不能加密???
etre_liu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-04
  • 最后登录2004-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-07 15:22
隐藏的那个目录需要经常添加和删除文件啊
etre_liu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-04
  • 最后登录2004-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-09 11:29
我顶一下,怎么没有人回答我啊,到现在还是没有做出来?急啊.
TH1999
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2013-01-22
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望66点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-09 12:26
这儿是有很多人知道都不愿回答的。
很郁闷啊!!
可惜我不知道!
[img]http://61.128.167.6/uploadFace/2127_200421415585766440.gif[/img]
jiaocq1972
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2014-02-08
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望34点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-13 09:14
我帮你顶一下。
我也需要这方面的信息。
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-13 11:05
处理IRP_MJ_DIRECTORY_CONTROL

NTSTATUS
CommonCompletion(
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PVOID Context
    )
{
UNREFERENCED_PARAMETER(DeviceObject);
UNREFERENCED_PARAMETER(Irp);

if (Irp->PendingReturned)
{
KeSetEvent((PRKEVENT) Context, IO_NO_INCREMENT, FALSE);
}
return STATUS_MORE_PROCESSING_REQUIRED;
}

NTSTATUS
DispatchDirectoryControl(
IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PIO_STACK_LOCATION IrpSp
)
{
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
KEVENT event;
PFILE_BOTH_DIR_INFORMATION QueryBuffer = NULL;
PFILE_BOTH_DIR_INFORMATION PreQueryBuffer = NULL;
ULONG offset = 0;
ULONG pos = 0;
ULONG len = 0;
ULONG newlen =0;
NTSTATUS status;

KeInitializeEvent(&event, NotificationEvent, FALSE);
IoCopyCurrentIrpStackLocationToNext(Irp);
IoSetCompletionRoutine(Irp, CommonCompletion, &event, TRUE, TRUE, TRUE);
status = IoCallDriver(pdx->AttachedDeviceObject, Irp);
if (STATUS_PENGING == status)
{
KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL);
}

while (1)
{
len = IrpSp->Parameters.QueryFile.Length;
newlen = len;
QueryBuffer = (PFILE_BOTH_DIR_INFORMATION) Irp->UserBuffer;
PreQueryBuffer = QueryBuffer;

if ((!QueryBuffer) || (QueryBuffer->NextEntryOffset > len))
{
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(pdx->AttachedDeviceObject, Irp);
}

do
{
offset = QueryBuffer->NextEntryOffset;
// 你的过滤规则
if ((QueryBuffer->FileNameLength > 0) && (_wcsicmp(QueryBuffer->FileName, file) == 0))
{
if (0 == offset) // the last one
{
PreQueryBuffer->NextEntryOffset = 0;
newlen = pos;
}
else
{
if (PreQueryBuffer != QueryBuffer)
{
PreQueryBuffer->NextEntryOffset += QueryBuffer->NextEntryOffset;
}
else // the first one
{
RtlMoveMemory((PUCHAR) QueryBuffer, (PUCHAR) QueryBuffer + offset, len - pos - offset);

}
newlen -= offset;
}
break;
}
pos += offset;
PreQueryBuffer = QueryBuffer;
QueryBuffer = (PFILE_BOTH_DIR_INFORMATION) ((PUCHAR) QueryBuffer + offset);
} while (0 != offset);

if (0 == newlen)
{
// 所有文件(夹)都被过滤
IoCopyCurrentIrpStackLocationToNext(Irp);
IoSetCompletionRoutine(Irp, CommonCompletion, &event, TRUE, TRUE, TRUE);
KeResetEvent(&event);
status = IoCallDriver(pdx->AttachedDeviceObject, Irp);
if (STATUS_PENGING == status)
{
KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, NULL);
}

// 没有文件(夹),直接返回,否则继续过滤
if (0 == Irp->IoStatus.Information)
{
break;
}
}
else
{
Irp->IoStatus.Information = newlen;
break;
}
}

IoCompleteRequest(Irp, IO_NO_INCREMENT);
    return Irp->IoStatus.Status;
}


不能CD的话,需要拦截IRP_MJ_CREATE,返回失败

[编辑 -  7/13/04 by  tooflat]

[编辑 -  7/13/04 by  tooflat]

[编辑 -  7/13/04 by  tooflat]
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-13 14:26
直接在服务函数那里过滤可能最简单,
不停学习
游客

返回顶部