阅读:2393回复:19
哪位有DeviceTree的源码,或者其它可以获取设备信息的代码??
想根据DeviceTree的原理,获取系统中各种类型的设备对象信息,从而实现对设备的各种控制。
不胜感激,谢谢!!! |
|
最新喜欢:aasa2
|
沙发#
发布于:2004-12-01 23:08
想根据DeviceTree的原理,获取系统中各种类型的设备对象信息,从而实现对设备的各种控制。 |
|
|
板凳#
发布于:2004-12-02 08:52
[quote] 想根据DeviceTree的原理,获取系统中各种类型的设备对象信息,从而实现对设备的各种控制。[/quote] 真是感谢,俺没事也研究研究 |
|
|
地板#
发布于:2004-12-02 09:09
试试先。
先送10分表谢,呵呵。 |
|
|
地下室#
发布于:2004-12-02 09:16
to KMK:
EnumService输出的内容好像与分析注册表的比较类似,我想了解的是动态获取系统的内核设备对象信息,如同DeviceTree的功能。 |
|
|
5楼#
发布于:2004-12-02 22:36
这个简单啊,在用户态调用SetupDiGetClassXXX这类函数,通过设备的 GUID 就可以得到啊。我看到微软的那个总线枚举的例子就是这样搞得(名字记不清楚了好像是toster)。你可以试试...
|
|
6楼#
发布于:2004-12-03 07:20
device tree得实现...
他有使用一个sys的...叫objinfo...用vc导出资源就能看到...那个sys很简单...只有9k而已...大致看了看..似乎主要的目的是获取名字...似乎还发送有特殊的irp.... 其他的功能...使用了setupapi.dll的几个函数...获取一些信息..有些在应用层获取不了的信息..比如device object的地址啊..vpb的地址啊..vpb的内容啊..这些用objinfo获取到的..都很简单的.. dumpbin + ida + 少量时间就能大致的分析出来了... 看了看..在msdn的pdb server上面没有这个objinfo.sys的pdb..呵呵 |
|
7楼#
发布于:2004-12-03 10:02
大家说说做一个类似
winobj或者device manager的程序需要用到那些技术呢? |
|
8楼#
发布于:2004-12-06 14:42
你是想做到什么程度啊?
是不是这样 |
|
9楼#
发布于:2004-12-06 15:31
你是想做到什么程度啊? 跟这个差不多吧,大虾有这个代码。 |
|
|
10楼#
发布于:2004-12-08 09:55
注意其中我使用的函数
typedef struct _DIRECTORY_BASE_INFOMATION{ UNICODE_STRING ObjName; UNICODE_STRING ObjType; }DIRECTORY_BASE_INFOMATION,*PDIRECTORY_BASE_INFOMATION; #define OBJ_INHERIT 0x00000002L #define OBJ_PERMANENT 0x00000010L #define OBJ_EXCLUSIVE 0x00000020L #define OBJ_CASE_INSENSITIVE 0x00000040L #define OBJ_OPENIF 0x00000080L #define OBJ_OPENLINK 0x00000100L #define OBJ_KERNEL_HANDLE 0x00000200L #define OBJ_FORCE_ACCESS_CHECK 0x00000400L #define OBJ_VALID_ATTRIBUTES 0x000007F2L ULONG CAppDevMonitor::GetDirContent(IN PCHAR pcDir, IN OUT PDIRECTORY_BASE_INFOMATION pDirInfo, IN ULONG ulSize, OUT ULONG &ulOutSize) { HANDLE hDir = NULL; OBJECT_ATTRIBUTES ObjAttributes = {0}; NTSTATUS RetStatus = 0; ULONG ulRetVal = 0; ULONG ulRetContext = 0; UNICODE_STRING ustrName = {0}; ANSI_STRING ansiStr = {0}; RtlInitAnsiString(&ansiStr, pcDir); RtlAnsiStringToUnicodeString(&ustrName, &ansiStr, TRUE); InitializeObjectAttributes(&ObjAttributes, &ustrName, OBJ_OPENIF, NULL, NULL); RetStatus = ZwOpenDirectoryObject(&hDir, GENERIC_READ, &ObjAttributes); RtlFreeUnicodeString(&ustrName); ulRetVal = RtlNtStatusToDosError(RetStatus); if(ulRetVal != ERROR_SUCCESS) { return ulRetVal; } ulRetContext = 0; RetStatus = ZwQueryDirectoryObject(hDir, pDirInfo, ulSize, FALSE, TRUE, &ulRetContext, &ulOutSize); ulRetVal = RtlNtStatusToDosError(RetStatus); ZwClose(hDir); return ulRetVal; } |
|
11楼#
发布于:2004-12-08 09:58
使用native api的问题我就不多说了
|
|
12楼#
发布于:2004-12-08 10:00
注意的是如果是根目录,那么应该是"\\",如果是device目录,那么应该是"\\Device", etc
|
|
13楼#
发布于:2004-12-08 10:10
看了一下,其中几个函数在MSDN中也没有找到,所以不是很清楚,不过还是要多谢。
想送分,不过好像只能送一次分了,下次补上。^_^ [编辑 - 12/8/04 by fslife] |
|
|
14楼#
发布于:2004-12-08 23:13
用户被禁言,该主题自动屏蔽! |
|
15楼#
发布于:2004-12-09 10:12
靠,代码都给你了,你说你经验的长进会多吗?
不要想着什么都不劳而获 图片是可以看见的,起码到现在还没有人报告说看不了(除了你之外),你看看是不是IE选项里面的UTF-8选项打上了 |
|
16楼#
发布于:2004-12-09 22:48
用户被禁言,该主题自动屏蔽! |
|
17楼#
发布于:2004-12-09 23:17
靠,代码都给你了,你说你经验的长进会多吗? 好人做到底吧,嘿嘿...... |
|
|
18楼#
发布于:2004-12-10 09:23
主要使用的函数原形
NTSYSAPI NTSTATUS NTAPI ZwOpenDirectoryObject( OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes ); NTSYSAPI NTSTATUS NTAPI ZwClose( IN HANDLE Handle ); NTSYSAPI ULONG NTAPI RtlNtStatusToDosError ( NTSTATUS Status ); NTSYSAPI VOID NTAPI RtlInitUnicodeString( PUNICODE_STRING DestinationString, PCWSTR SourceString ); NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString( PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString ); NTSYSAPI VOID NTAPI RtlFreeAnsiString( PANSI_STRING AnsiString ); NTSYSAPI NTSTATUS NTAPI ZwQueryDirectoryObject( IN HANDLE DirectoryHandle, IN OUT PVOID pBuffer, IN ULONG ulBufferLength, IN BOOLEAN ReturnSingleEntry, IN BOOLEAN ReStartScan, IN OUT PULONG Context, OUT PULONG ReturnLength OPTIONAL ); NTSYSAPI VOID NTAPI RtlInitAnsiString( PANSI_STRING DestinationString, PCHAR SourceString ); NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString( PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString ); NTSYSAPI VOID NTAPI RtlFreeUnicodeString( PUNICODE_STRING UnicodeString ); NTSYSAPI NTSTATUS NTAPI ZwOpenSymbolicLinkObject( OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes ); NTSYSAPI NTSTATUS NTAPI ZwQuerySymbolicLinkObject( IN HANDLE LinkHandle, IN OUT PUNICODE_STRING LinkTarget, OUT PULONG ReturnedLength OPTIONAL ); |
|
19楼#
发布于:2004-12-10 09:29
忘记说了,只有通过驱动程序才能控制设备,应用程序要控制设备也是通过向驱动程序传递控制代码来实现控制的
你可以写一个驱动程序,需要控制哪个设备,那么就让驱动程序拦截指定的设备从而实现拦截 |
|