Re[2]: ZwQuerySecurityObject. Как грамотно пользоваться?
От: chipik  
Дата: 26.09.08 17:37
Оценка:
Здравствуйте, gear nuke, Вы писали:


GN>А если бы дело было не с ntdll, а в ядре где нет дебажного CRT, как бы обнаружилась ошибка, если возвращаемый статус не проверяется?


Ну у меня реализовано вот так:

int func::CZwQuerySecurityObject() {
    PULONG ReturnL=0;
    ULONG               uLength = 0x800;
    
    PISECURITY_DESCRIPTOR pSD=NULL,pSD2;
    HMODULE hModule=LoadLibrary(L"Ntdll.dll");
    NTSTATUS status;
    NTSTATUS (WINAPI *pZwQuerySecurityObject)(HANDLE,SECURITY_INFORMATION,PISECURITY_DESCRIPTOR,ULONG,PULONG);
    pZwQuerySecurityObject=(NTSTATUS (WINAPI*)(HANDLE,SECURITY_INFORMATION,PISECURITY_DESCRIPTOR,ULONG,PULONG))    GetProcAddress(hModule,"ZwQuerySecurityObject");
    if(pZwQuerySecurityObject==NULL) abort();    
    do 
    {    if (pSD) free(pSD);
    uLength *= 2;
    pSD=(PISECURITY_DESCRIPTOR)malloc(uLength);
    if (!pSD)
        printf("malloc failed! ");
    status = pZwQuerySecurityObject(directoryHandle,DACL_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|OWNER_SECURITY_INFORMATION,pSD,uLength,ReturnL);

    } while (status == STATUS_BUFFER_TOO_SMALL);

    
    return 0;
}


Вся загвоздка в том, почему в поле Owner, функция возращает не то что нужно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.