Извиняюсь за глупый вопрос...
Хочется получить имя для тома файловой системы вида \Device\HarddiskVolume0\
Здравствуйте, 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.
Здравствуйте, 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 );
}
}
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.