阅读:1961回复:8
急啊,老板让我写一个隐藏目录和文件的程序,无论怎么样都看不到,而且不能用cd进入,我在这里看了很多实现方法,不过我以前没有做过这方面的东西,不会,谁有相应的源代码给我看看啊,谢谢
急啊,老板让我写一个隐藏目录和文件的程序,无论怎么样都看不到,而且不能用cd进入,我在这里看了很多实现方法,不过我以前没有做过这方面的东西,不会,谁有相应的源代码给我看看啊,谢谢!老板让我这周做过,我以产没有用过DDK之类的东西,什么都不会啊,那位大侠帮帮我吧,分可以在给.其他也可以的.只要不过份.
|
|
最新喜欢:![]() |
沙发#
发布于:2004-07-07 14:50
可以在nt,2000,xp,2003下运行,急啊,还有两天了,我一点头绪都没有.
我的邮件是eliu@visall.com |
|
板凳#
发布于:2004-07-07 15:14
问一个问题先,你需要隐藏文件和目录的那台机器要经常添加和删除文件吗???
为什么非要隐藏,而不能加密??? |
|
地板#
发布于:2004-07-07 15:22
隐藏的那个目录需要经常添加和删除文件啊
|
|
地下室#
发布于:2004-07-09 11:29
我顶一下,怎么没有人回答我啊,到现在还是没有做出来?急啊.
|
|
5楼#
发布于:2004-07-09 12:26
这儿是有很多人知道都不愿回答的。
很郁闷啊!! 可惜我不知道! |
|
|
6楼#
发布于:2004-07-13 09:14
我帮你顶一下。
我也需要这方面的信息。 |
|
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] |
|
8楼#
发布于:2004-07-13 14:26
直接在服务函数那里过滤可能最简单,
|
|
|