![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перечисление системных объектных типов [Win2k]
BiN © (2006-10-18 16:20:00)Как по вашему, возможна ли ситуация, когда NtQueryObject(0, ObjectAllTypesInformation... возвращает не полный список типов
Собственно, кусок действующего кода
procedure TSystemTypeList.Refresh;
var
Data: POBJECT_ALL_TYPES_INFO;
TypeInfo: POBJECT_TYPE_INFO;
dwToRead: DWORD;
dwRead: DWORD;
ntRes: NTSTATUS;
i: Integer;
begin
Clear;
Data:=nil;
try
dwToRead:=0;
ntRes:=NtQueryObject(0, ObjectAllTypesInformation, Data, dwToRead, @dwRead);
while ntRes=STATUS_INFO_LENGTH_MISMATCH do
begin
dwToRead:=dwRead;
ReallocMem(Data, dwToRead);
ntRes:=NtQueryObject(0, ObjectAllTypesInformation, Data, dwToRead, @dwRead);
end;
if not NT_SUCCESS(ntRes) then
RaiseNtStatusError(ntRes);
ReallocMem(Data, dwRead);
TypeInfo:=@(Data^.ObjectsTypeInfo);
for i:=0 to Data^.NumberOfObjectTypes-1 do
begin
Add(TypeInfo);
TypeInfo:=POBJECT_TYPE_INFO((DWORD(TypeInfo.Name.Buffer)+TypeInfo.Name.Length) and not 3+4);
end;
finally
ReallocMem(Data, 0);
end;
end;
В результате, в список по пока невыясненным причинам не попадает, например, тип "File". Но при этом вызов NtQueryObject(hTempHandle, ObjectTypeInformation... с хэндлом файла в качестве параметра отрабатывает вполне корректно.
Ketmar (2006-10-18 16:47:00) [41]файл чужой просто? (это так, бредовое предположение)