mirror of
https://github.com/reactos/reactos.git
synced 2024-09-14 06:42:52 +00:00
Implemented NtQueryObject(ObjectBasicInformation).
svn path=/trunk/; revision=6311
This commit is contained in:
parent
09bed329b8
commit
47419d0b98
|
@ -1,4 +1,4 @@
|
|||
/* $Id: ntobj.c,v 1.15 2003/10/04 17:11:58 ekohl Exp $
|
||||
/* $Id: ntobj.c,v 1.16 2003/10/14 14:49:05 ekohl Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -103,8 +103,8 @@ NtQueryObject (IN HANDLE ObjectHandle,
|
|||
IN ULONG Length,
|
||||
OUT PULONG ReturnLength OPTIONAL)
|
||||
{
|
||||
POBJECT_TYPE_INFORMATION typeinfo;
|
||||
POBJECT_HEADER ObjectHeader;
|
||||
ULONG InfoLength;
|
||||
PVOID Object;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
@ -124,21 +124,56 @@ NtQueryObject (IN HANDLE ObjectHandle,
|
|||
switch (ObjectInformationClass)
|
||||
{
|
||||
case ObjectBasicInformation:
|
||||
Status = STATUS_NOT_IMPLEMENTED;
|
||||
InfoLength = sizeof(OBJECT_BASIC_INFORMATION);
|
||||
if (Length != sizeof(OBJECT_BASIC_INFORMATION))
|
||||
{
|
||||
Status = STATUS_INFO_LENGTH_MISMATCH;
|
||||
}
|
||||
else
|
||||
{
|
||||
POBJECT_BASIC_INFORMATION BasicInfo;
|
||||
|
||||
BasicInfo = (POBJECT_BASIC_INFORMATION)ObjectInformation;
|
||||
BasicInfo->Attributes = 0; /* FIXME*/
|
||||
BasicInfo->GrantedAccess = 0; /* FIXME*/
|
||||
BasicInfo->HandleCount = ObjectHeader->HandleCount;
|
||||
BasicInfo->PointerCount = ObjectHeader->RefCount;
|
||||
BasicInfo->PagedPoolUsage = 0; /* FIXME*/
|
||||
BasicInfo->NonPagedPoolUsage = 0; /* FIXME*/
|
||||
BasicInfo->NameInformationLength = 0; /* FIXME*/
|
||||
BasicInfo->TypeInformationLength = 0; /* FIXME*/
|
||||
BasicInfo->SecurityDescriptorLength = 0; /* FIXME*/
|
||||
if (ObjectHeader->ObjectType == ObSymbolicLinkType)
|
||||
{
|
||||
BasicInfo->CreateTime.QuadPart =
|
||||
((PSYMLINK_OBJECT)Object)->CreateTime.QuadPart;
|
||||
}
|
||||
else
|
||||
{
|
||||
BasicInfo->CreateTime.QuadPart = 0ULL;
|
||||
}
|
||||
Status = STATUS_SUCCESS;
|
||||
}
|
||||
break;
|
||||
|
||||
case ObjectNameInformation:
|
||||
Status = ObQueryNameString (Object,
|
||||
(POBJECT_NAME_INFORMATION)ObjectInformation,
|
||||
Length,
|
||||
ReturnLength);
|
||||
&InfoLength);
|
||||
break;
|
||||
|
||||
case ObjectTypeInformation:
|
||||
typeinfo = (POBJECT_TYPE_INFORMATION)ObjectInformation;
|
||||
if (Length!=sizeof(OBJECT_TYPE_INFORMATION))
|
||||
return STATUS_INVALID_BUFFER_SIZE;
|
||||
// InfoLength =
|
||||
if (Length != sizeof(OBJECT_TYPE_INFORMATION))
|
||||
{
|
||||
Status = STATUS_INVALID_BUFFER_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
POBJECT_TYPE_INFORMATION typeinfo;
|
||||
|
||||
typeinfo = (POBJECT_TYPE_INFORMATION)ObjectInformation;
|
||||
// FIXME: Is this supposed to only be the header's Name field?
|
||||
// Can somebody check/verify this?
|
||||
RtlCopyUnicodeString(&typeinfo->Name,&ObjectHeader->Name);
|
||||
|
@ -152,6 +187,7 @@ NtQueryObject (IN HANDLE ObjectHandle,
|
|||
//This should be info from the object header, not the object type, right?
|
||||
typeinfo->TotalHandles = ObjectHeader-> HandleCount;
|
||||
typeinfo->ReferenceCount = ObjectHeader -> RefCount;
|
||||
}
|
||||
break;
|
||||
|
||||
case ObjectAllTypesInformation:
|
||||
|
@ -169,6 +205,9 @@ NtQueryObject (IN HANDLE ObjectHandle,
|
|||
|
||||
ObDereferenceObject(Object);
|
||||
|
||||
if (ReturnLength != NULL)
|
||||
*ReturnLength = InfoLength;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -209,8 +248,7 @@ ObMakeTemporaryObject (IN PVOID ObjectBody)
|
|||
*
|
||||
* REVISIONS
|
||||
*/
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
NTSTATUS STDCALL
|
||||
NtMakeTemporaryObject (IN HANDLE Handle)
|
||||
{
|
||||
POBJECT_HEADER ObjectHeader;
|
||||
|
|
Loading…
Reference in a new issue