DeviceObject의 경우에는 Document된 함수를 이용하면 되지만, DriverObject를 이름을 이용하여
얻어오는 함수는 Document되어 있지 않죠...
ObReferenceObjectByName 함수를 이용하면, DriverObject도 이름으로 얻어올수 있죠..
아래와 같이 함수를 만들어 놓으면 좋습니다.
[function prototype]
NTSTATUS
ObReferenceObjectByName(
IN PUNICODE_STRING ObjectName,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID *Object
);
[function definition]
- extern POBJECT_TYPE *IoDriverObjectType;
- PDRIVER_OBJECT GetDriverObject( WCHAR* DeviceName )
- {
- UNICODE_STRING uniDriverName;
- PVOID pDriverObj;
- NTSTATUS status;
- RtlInitUnicodeString( &uniDriverName, DeviceName);
- status = ObReferenceObjectByName(
- &uniDriverName, // IN PUNICODE_STRING ObjectName
- OBJ_CASE_INSENSITIVE, // IN ULONG Attributes
- NULL, // IN PACCESS_STATE PassedAccessState OPTIONAL,
- (ACCESS_MASK)0L,
- *IoDriverObjectType,
- KernelMode,
- NULL,
- &pDriverObj
- );
- if( NT_SUCCESS(status))
- {
- KdPrint(("DEVGURU :: DeviceName ==> %ws, DriverObject = 0x%x \n", DeviceName, pDriverObj ));
- ObDereferenceObject(pDriverObj);
- return (PDRIVER_OBJECT)pDriverObj;
- }
- return (PDRIVER_OBJECT)0;
- }
ex) GetDriverObject( L\\Driver\\TaejinDriver);