download
驱动牛犊
驱动牛犊
  • 注册日期2002-04-06
  • 最后登录2021-06-15
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望115点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1491回复:6

[求助] mini-filter如何取得外部连线到本机网芳时, 主机网芳被开启的资料夹路径?

楼主#
更多 发布于:2008-07-22 21:34
小弟浅学, IFS的mini-filter 透过register callback function ,

经由IRP_MJ_CREATE可以取得 本机连到其他电脑网芳时,所开启的资料夹路径,

所以我可以在XXXPreCreate判断路径然后控制  这个远端的网芳可不可以允许存取..............................

但反过来.............却不知道其他电脑连线到本机网芳时,怎么去得到相关的路径 (或开启的资料夹路径)

小弟想要在mini-fitler内取得............这个资料.........然后在那个  PreOperation or PostOperation就直接ACCESS DENIED....

达到 远端电脑不可以任意的存取本机分享的netbios资料夹....

期望各位不吝指教.....

best regards
download
驱动牛犊
驱动牛犊
  • 注册日期2002-04-06
  • 最后登录2021-06-15
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望115点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2008-07-24 10:52
Re:[求助] mini-filter如何取得外部连线到本机网芳时, 主机网芳被开启的资料
= =....自推....

XXXPreCreate 其實是可以知道哪個網路鄰居的資料夾被開啟.....

但是怎麼知道他是網路鄰居的資料夾.....這個我不知道怎麼在mini-filter判斷...

nameInfo->Share值也是null....不像網路磁碟路徑會有資料...........

但是我想我可以從用戶端取得.....網芳分享的資料......

然後透過communication port傳給mini-filter.....再做比對的動作......

這是我目前所能想到的唯一方法..........................................
destinyqq
驱动牛犊
驱动牛犊
  • 注册日期2006-09-18
  • 最后登录2013-01-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望35点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-07-24 12:01
我还想到一个想法

收到 creat irp 的时候我们可以查询是哪个线程在访问

过滤相应的线程呢? 这样就可以禁止别人访问自己的共享目录,不过不能更细腻的过滤
download
驱动牛犊
驱动牛犊
  • 注册日期2002-04-06
  • 最后登录2021-06-15
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望115点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2008-07-25 17:20
= =....一樣在IRP_MJ_CREATE......

可以得到\device\harddiskvolume1\分享資料夾.....這個路徑....

果然還是要自己trace一次就知道了....

接下來看網芳怎麼弄成唯讀的.....
download
驱动牛犊
驱动牛犊
  • 注册日期2002-04-06
  • 最后登录2021-06-15
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望115点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2008-07-31 20:43
自推...
系统上的网路磁碟(Z:) 假设这是从主机B分享的网路邻居所新增来的磁碟....(权限全开:可读可写)

然后我在IRP_MJ_WRITE的PreOperation可以取得路径为『\主机B\分享资料夹』 (并非Z:)
(当然这样我也可以做比对)

实际上观察到的行为是修改一个文件的内容  是被限制的

但是可以在Z:上面新增档案,删除档案,复制档案.....

我用OSR出的IrpTracker追了一下....发现....= =...它新增档案的时候是不发IRP_MJ_WRITE......

反而是发IRP_MJ_DIRECTORY_CONTROL和 IRP_MJ_FILE_SYSTEM_CONTROL

其中我过滤IRP_MJ_FILE_SYSTEM_CONTROL的PreOperation发现没有作用....

然后我就过滤IRP_MJ_DIRECTORY_CONTROL的PreOperation.....发现整个是禁止存取的作用

不知道大牛们...跟我说...怎么在从IRP_MJ_DIRECTORY_CONTROL去分出读和写的过滤...= =..

我看IRP包里面FILE_INFORMATION_CLASS 都是 FileBothDirectoryInformation (0x3)

不知道0x3 还可以怎么分出新增档案...删除档案...修改档案...= =....然后我只要可以读文件就好...

best regards....(小弟不熟悉简体用法...敬请见谅)
destinyqq
驱动牛犊
驱动牛犊
  • 注册日期2006-09-18
  • 最后登录2013-01-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望35点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-07-31 21:16
修改档案 就是rename的意思吧

sfilter中在  IRP_MJ_SET_INFORMATION 中可以过滤
download
驱动牛犊
驱动牛犊
  • 注册日期2002-04-06
  • 最后登录2021-06-15
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望115点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2008-08-01 17:00
今天回到用IRP_MJ_CREATE,並且判斷IoStatus.Information == FILE_CREATE(代表是新建的,不是打開文件), 來做唯讀的功能, 這樣的程式在U盤運行的很好,但是在網路磁碟中.....發生了怪事....

1.copy檔案到U盤時,會存取禁止,這是正常的功能.  (功能正常)

2.當我在網路磁碟上自己新增檔案( a.txt) 和 資料夾 .................結果會一直跑
IRP_MJ_CREATE , IRP_MJ_DIRECTORY_CONTROL,IRP_MJ_QUERY_INFORMATION
然後等它跑完我重新整理一下資料夾發現會多了1000個txt文件 (檔名照為a.txt, a(1).txt, a(2).txt....)
嘗試新增資料夾時,也會一次新增兩個......

不知道Network File System在處理唯讀時是否還要注意什麼地方.....盼大牛指點...
best  regards.
游客

返回顶部