Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
阅读:1390回复:6

zhaock 在吗?还是刚才那个问题!!急啊

楼主#
更多 发布于:2005-05-16 18:10
还是刚才那个问题
我按照你的方法,还是没能加密?
NTSTATUS FilemonWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
PIO_STACK_LOCATION  currentIrpStack = IoGetCurrentIrpStackLocation(Irp);
    PFILE_OBJECT        FileObject;
   // PHOOK_EXTENSION     hookExt = DeviceObject->DeviceExtension;
PFILE_CONTEXT FileCtxPtr = NULL;
PREAD_WRITE_COMPLETION_CONTEXT CompletionCtx = NULL;
PVOID OldBuffer = NULL;
PVOID MyBuffer = NULL;
ULONG Length = 0;
ULONG Offset = 0;

if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))
{
IoSkipCurrentIrpStackLocation(Irp);
return STATUS_INVALID_PARAMETER;
}
if(Irp->MdlAddress)
{
OldBuffer = MmGetSystemAddressForMdl(Irp->MdlAddress);
}
else
{
OldBuffer = Irp->UserBuffer;
}
Length = currentIrpStack->Parameters.Write.Length;

MyBuffer = ExAllocatePool(NonPagedPool,Length);

CompletionCtx->OldMdl = Irp->MdlAddress;
CompletionCtx->OldUserBuffer = Irp->UserBuffer;
CompletionCtx->OldSystemBuffer = Irp->AssociatedIrp.SystemBuffer;

CompletionCtx->OldBuffer = OldBuffer;
CompletionCtx->MyBuffer = MyBuffer;
CompletionCtx->Length = Length;

Irp->MdlAddress = IoAllocateMdl(MyBuffer,Length,FALSE, TRUE, NULL);
for(Offset = 0 ; Offset < Length ; ++Offset)
{
((PCHAR)MyBuffer)[Offset] = ~(((PCHAR)OldBuffer)[Offset]+1);
}
MmBuildMdlForNonPagedPool(Irp->MdlAddress);
Irp->UserBuffer=MmGetMdlVirtualAddress(Irp->MdlAddress);

IoCopyCurrentIrpStackLocationToNext(Irp);
IoSetCompletionRoutine(Irp,WriteCompletion,CompletionCtx,TRUE,TRUE,TRUE);

IoCompleteRequest(Irp, IO_NO_INCREMENT);

return STATUS_SUCCESS;
}


NTSTATUS WriteCompletion(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp,
IN PREAD_WRITE_COMPLETION_CONTEXT Context)
{
PREAD_WRITE_COMPLETION_CONTEXT CompletionCtx = Context;
IoFreeMdl(Irp->MdlAddress);

Irp->MdlAddress = CompletionCtx->OldMdl;
Irp->UserBuffer = CompletionCtx->OldUserBuffer;
Irp->AssociatedIrp.SystemBuffer = CompletionCtx->OldSystemBuffer;

ExFreePool(CompletionCtx->MyBuffer);

return STATUS_SUCCESS;
}
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-17 08:59
现在正在按照zhaock大哥教我的方法改程序,等改好了,我再贴出来,大家一起看看!

再次感谢zhaock大哥!

 :cool: :cool: :cool: :cool: :cool: :cool:
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-16 20:21
好的,我自己试试


[编辑 -  5/17/05 by  Hell_Fire_1981]
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-05-16 20:12
我看了看你的代码,问题确实不少,我也从驱动网上下了一个例子,
是用sfilter的,我看你的代码也是根据它来改的。

你先把我前面说的问题看看,一步步都改过来
然后把你调试中遇到的问题,贴上来。

只有这样,一步步调试,才能真正提高你的驱动水平。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-05-16 19:11
你设个断点看看OldBuffer 是不是你真要写的数据;
现在的问题,是写成功了,只是明文的,还是根本就没有写
成功?
而且你的CompletionCtx 要动态分配,并在回调里释放,
你设置一个断点,看看回调是不是真的被调用了

Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-16 18:47
为什么现在改了还是没有用啊
return IoCallDriver( hookExt->FileSystem , Irp );
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-05-16 18:24
<IoSetCompletionRoutine(Irp,WriteCompletion,CompletionCtx,TRUE,TRUE,TRUE);


<IoCompleteRequest(Irp, IO_NO_INCREMENT);
显然不对呀,去掉IoCompleteRequest,你要call IoCallDriver,
往下传呀


游客

返回顶部