Как получить ObjectName по PDEVICE_OBJECT?
От: Crag  
Дата: 11.11.03 14:39
Оценка:
Извиняюсь за глупый вопрос...
Хочется получить имя для тома файловой системы вида \Device\HarddiskVolume0\
Re: Как получить ObjectName по PDEVICE_OBJECT?
От: _cb_  
Дата: 12.11.03 06:39
Оценка: +1
Здравствуйте, Crag, Вы писали:

C>Извиняюсь за глупый вопрос...

C>Хочется получить имя для тома файловой системы вида \Device\HarddiskVolume0\


typedef struct _OBJECT_NAME_INFORMATION {               
    UNICODE_STRING Name;                                
} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;   


NTKERNELAPI
NTSTATUS
ObQueryNameString (
    IN PVOID                        Object, // pDeviceObject
    OUT POBJECT_NAME_INFORMATION    ObjectNameInfo, // buffer for receive object name
    IN ULONG                        Length, // sizeof buffer
    OUT PULONG                      ReturnLength 
);



btw
естественно что вызывать надо на PASSIVE_LEVEL и помнить о рекурсии при запросе имен объектов расположенных во внешних пространствах имен (файлы, пайпы и прочее).

cb.
Re: Как получить ObjectName по PDEVICE_OBJECT?
От: Злость Россия  
Дата: 12.11.03 06:49
Оценка:
Здравствуйте, Crag, Вы писали:

C>Извиняюсь за глупый вопрос...

C>Хочется получить имя для тома файловой системы вида \Device\HarddiskVolume0\


VOID
XXXXXXGetObjectName (
  IN PVOID Object,
  IN OUT PUNICODE_STRING Name
)
{
  NTSTATUS status;
  CHAR nibuf[512];        
  POBJECT_NAME_INFORMATION nameInfo = (POBJECT_NAME_INFORMATION)nibuf;
  ULONG retLength;
  status = ObQueryNameString( Object, nameInfo, sizeof(nibuf), &retLength );
  Name->Length = 0;
  if (NT_SUCCESS( status )) {
    RtlCopyUnicodeString( Name, &nameInfo->Name );
  }
}
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.