terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:2159回复:11

怎么拿到\Device\Harddisk0有多少个partition?

楼主#
更多 发布于:2004-03-26 14:48
怎么访问\Device\Harddisk0目录下有多少个partition的device object?
直接用zwcreatefile打开目录,还是用其它的方法呢?
高手指教,谢了先
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-30 14:54
谢谢了,
dynamic disk我倒没有考虑,
不知道应该怎么办,如果query可以用,也许我可以看看directory里有多少device object就好了。不需要用partition了
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-30 14:23
顺便一点:我这里有两个硬盘,一个是Base Disk,一个是Dynamic Disk。我发现只有Base Disk下面才有PartitionX(1,2,...)等这些符号连接,而Dynamic Disk下面并没有出现这些东西,所以你要小心一些哦。
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-30 14:20
自己声明一下不就OK了?

NTSYSAPI
NTSTATUS
NTAPI
    ZwQueryDirectoryObject(
        IN HANDLE DirectoryHandle,
        OUT PVOID Buffer,
        IN ULONG BufferLength,
        IN BOOLEAN ReturnSingleEntry,
        IN BOOLEAN RestartScan,
        IN OUT PULONG Context,
        OUT PULONG ReturnLength OPTIONAL
        );
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-30 13:26
对啊,现在我就是想call这个函数,怎么call啊?这是个internal的函数啊。
我就是想拿到device/harddisk0里面有多少个partition1,partition2这样的symboliclink,他对我很有用

[编辑 -  3/30/04 by  terrychen]
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-30 12:56
是不是这个函数?

    ZwQueryDirectoryObject(
        IN HANDLE DirectoryHandle,
        OUT PVOID Buffer,
        IN ULONG BufferLength,
        IN BOOLEAN ReturnSingleEntry,
        IN BOOLEAN RestartScan,
        IN OUT PULONG Context,
        OUT PULONG ReturnLength OPTIONAL
        );

老实说,我一直没有弄明白你到底想做什么 :(
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-30 12:35
你的方法不错,可是我却不能用,因为可能有几个不同的dp属于不同的disk.

你知道我拿到directory object以后怎么访问里面的内容么
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-29 12:03
提供一个建议(没有实际做过):

1、调用ObReferenceObjectByName()引用“\\Driver\\Disk”驱动对象DiskDriverObject。
2、遍历DiskDriverObject建立的每一个设备对象。查询该设备对象的名称,如果名称以“\\Device\\Harddisk0\\DP......”开头,则该设备必定是“\\Device\\Harddisk0”下面的一个设备对象。

注:

ObReferenceObjectByName()是Undocumented Function,要自己声明:

NTSYSAPI
NTSTATUS
NTAPI
ObReferenceObjectByName (
    IN PUNICODE_STRING ObjectName,
    IN ULONG Attributes,
    IN PACCESS_STATE AccessState OPTIONAL,
    IN ACCESS_MASK DesiredAccess OPTIONAL,
    IN POBJECT_TYPE ObjectType,
    IN KPROCESSOR_MODE AccessMode,
    IN OUT PVOID ParseContext OPTIONAL,
    OUT PVOID *Object
    );


[编辑 -  3/29/04 by  slwqw]

[编辑 -  3/29/04 by  slwqw]
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-29 11:21
MBR里面最大4个分区,你怎么搞定逻辑分区呢?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2004-03-29 09:19
直接读取MRB,自己搜索分区表,和DOS没什么不同。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-03-29 09:11
我也看到了这个函数,但是问题是在miniport里怎么得到这个deviceobject呢?
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-03-27 02:42
不知道IoReadPartitionTable或IoReadPartitionTableEx合不合用
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
游客

返回顶部