• 大小: 298KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: C++,驱动  

资源简介

这是实现目录重定向的源代码工程,包括驱动部分和应用层程序。 使用传统的文件过滤驱动为框架,截获某个目录下的所有IRP请求, 然后转发到应用层程序。 应用层程序通过FTP通讯,把请求再转发到FTP服务端, 从而把本地文件系统中的某个目录直接重定向到FTP服务器目录。 而操作这个被重定向的目录,就跟完全操作本地文件系统的目录一样,没任何区别。 本工程只是开发过程中的一个版本,许多BUG和功能同在, 所以不可直接使用到您的商业产品中,只可做研究学习之用。 相关博客查看 http://blog.csdn.net/fanxiushu/article/details/43636575 及后续章节。

资源截图

代码片段和文件信息

/////By Fanxiushu 2014-10-31
#include “common.h“

//通过盘符查询设备名//////

NTSTATUS getSymboliclinkobject(const wchar_t* SymName PUNICODE_STRING ObjName)
{
NTSTATUS status;
WCHAR Tmp[4];
PWCHAR buf = NULL;
HANDLE h;
UNICODE_STRING us;
ULONG length = 0;
RtlInitUnicodeString(&us SymName);
object_ATTRIBUTES oa;
///
ObjName->MaximumLength = ObjName->Length = 0; ObjName->Buffer = NULL;

InitializeobjectAttributes(&oa &us OBJ_KERNEL_HANDLE 0 NULL);
status = ZwOpenSymboliclinkobject(&h GENERIC_READ &oa);
if (!NT_SUCCESS(status)){
DPT(“ZwOpenSymboliclinkobject Err=0x%X\n“ status );
return status;
}
us.MaximumLength = 4;
us.Buffer = Tmp; 
us.Length = 0;
status = ZwQuerySymboliclinkobject(h &us &length);
if (status != STATUS_BUFFER_TOO_SMALL){ //不是尺寸不合适的错误,就认为是错误
ZwClose(h);
DPT(“ZwQuerySymboliclinkobject Err=0x%X\n“ status );
return STATUS_UNSUCCESSFUL;
}

buf = (PWCHAR)ExAllocatePoolWithTag(NonPagedPool length + sizeof(WCHAR) ‘FXSD‘);
if (!buf){
ZwClose(h);
return STATUS_INSUFFICIENT_RESOURCES;
}
ObjName->MaximumLength = (USHORT)length + sizeof(WCHAR);
ObjName->Length = 0;
ObjName->Buffer = buf;
status = ZwQuerySymboliclinkobject(h ObjName &length);

ZwClose(h);

if (!NT_SUCCESS(status)){
///
if (buf)ExFreePool(buf);
ObjName->MaximumLength = ObjName->Length = 0; ObjName->Buffer = NULL;
return status;
}

buf[length / sizeof(WCHAR)] = L‘\0‘;
////
return status;
}

static FORCEINLINE BOOLEAN
MatchDirectory(PUNICODE_STRING Name PUNICODE_STRING DirPUNICODE_STRING OutDir)
{
ULONG cnt2 = Dir->Length / sizeof(WCHAR);
ULONG cnt1 = Name->Length / sizeof(WCHAR);

if (cnt2 > cnt1) return FALSE; //全部路径都不够监控目录长

if (_wcsnicmp(Dir->Buffer Name->Buffer cnt2) == 0){ //匹配上了
ULONG cnt = cnt1 - cnt2;
PWCHAR buf = L“\\“;
if (cnt == 0){ //
// DPT(“** ALL Match!!.\n“);
//
cnt = 1; ////
}
else{
buf = &Name->Buffer[cnt2];
if (*buf != L‘\\‘){
if (cnt2 < 1 || Name->Buffer[cnt2 - 1] != L‘\\‘) return FALSE;
buf = &Name->Buffer[cnt2 - 1];
cnt += 1;
}
/////
}
/////
PWCHAR b = (PWCHAR)ExAllocatePoolWithTag(PagedPool (cnt + 1)*sizeof(WCHAR) ‘FXSD‘);
if (!b)return FALSE;
RtlCopyMemory(b buf cnt*sizeof(WCHAR));
b[cnt] = L‘\0‘;
OutDir->Length = (USHORT)cnt*sizeof(WCHAR);
OutDir->MaximumLength = ((USHORT)cnt + 1)*sizeof(WCHAR);
OutDir->Buffer = b;
////
return TRUE;
}
////
return FALSE;
}
//根据 FILE_object 的FileName判断这个对象是否在某个目录下 只在 IRP_MJ_CREATE 及创建之前有效
BOOLEAN IsFileObjNameInDirectory(PFILE_object fileObj PUNICODE_STRING Dir PUNICODE_STRING OutDir )
{
if (fileObj->FileName.Length == 0 || !fileObj->FileName.Buffer) return FALSE;

PUNICODE_STRING Name = &fileObj->FileName;
ULONG cnt2 = Dir->Length / sizeof(WCHAR);
ULONG cnt1 = Name->Length / sizeof(WCHAR);
if (!Name->Buffer || Name->Length == 0){
DPT(“** FILE_object->FileName Empty.\

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      40736  2013-07-19 23:57  bin\InstDrv.exe

     文件     121856  2015-01-19 20:42  bin\xFsRedir.exe

     文件      33280  2015-01-21 21:57  bin\xfs_redir.sys

     文件       5314  2014-12-16 13:47  driver\buildchk_win7_amd64.log

     文件        339  2015-01-19 23:13  driver\buildchk_win7_x86.log

     文件        341  2015-01-20 17:25  driver\buildfre_win7_amd64.log

     文件       3665  2015-01-21 21:57  driver\buildfre_win7_x86.log

     文件       6237  2015-01-12 10:51  driver\common.cpp

     文件       1787  2014-12-04 23:02  driver\common.h

     文件      23397  2015-01-21 21:44  driver\fastio.cpp

     文件      24094  2015-01-19 22:39  driver\fs_filter.cpp

     文件       4928  2015-01-17 01:37  driver\fs_filter.h

     文件      24308  2015-01-11 00:36  driver\fs_info.cpp

     文件      14691  2015-01-19 23:12  driver\fs_notify.cpp

     文件      22930  2015-01-18 05:15  driver\ioctl.cpp

     文件       3754  2015-01-05 16:01  driver\ioctl.h

     文件       2704  2015-01-19 22:24  driver\main.cpp

     文件        267  2002-03-25 19:38  driver\makefile

     文件       9140  2013-03-26 04:34  driver\rbtree.c

     文件       4364  2013-03-26 04:37  driver\rbtree.h

     文件        345  2015-01-15 21:21  driver\sources

     文件      17872  2015-01-20 17:22  driver\xfs_redir.cpp

     文件       5026  2015-01-20 17:18  driver\xfs_redir.h

    .CA....    527360  2015-01-21 21:57  driver\xfs_redir.pdb

     文件      33280  2015-01-21 21:57  driver\xfs_redir.sys

     文件       1548  2015-01-19 11:23  user\resource.h

     文件      21955  2015-01-19 01:33  user\src\fsdev.cpp

     文件       4269  2015-01-19 01:30  user\src\fsdev.h

     文件      16718  2015-01-19 12:09  user\src\fsftp.cpp

     文件      20061  2015-01-14 00:19  user\src\ftpclient.cpp

............此处省略20个文件信息

评论

共有 条评论

相关资源