internal unsafe KernelObjectType(OBJECT_TYPE_INFORMATION *info) { Index = info->TypeIndex; Name = new string(info->TypeName.Buffer, 0, info->TypeName.Length / 2); GenericMapping = new GenericMapping(&info->GenericMapping); InvalidAttributes = info->InvalidAttributes; NumberOfHandles = info->TotalNumberOfHandles; NumberOfObjects = info->TotalNumberOfObjects; ValidAccessMask = info->ValidAccessMask; PeakNumberOfHandles = info->HighWaterNumberOfHandles; PeakNumberOfObjects = info->HighWaterNumberOfObjects; }
internal unsafe static NativeObjectType FromTypeInformation(OBJECT_TYPE_INFORMATION *info) { var name = info->TypeName.ToString(); if (_types.TryGetValue(name, out var type)) { return(type); } type = new NativeObjectType(info, name); _types.Add(name, type); return(type); }
unsafe private NativeObjectType(OBJECT_TYPE_INFORMATION *info, string name = null) { NumberOfHandles = info->TotalNumberOfHandles; NumberOfObjects = info->TotalNumberOfObjects; Name = name ?? info->TypeName.ToString(); TotalPagedPoolUsage = info->TotalPagedPoolUsage; TotalNonPagedPoolUsage = info->TotalNonPagedPoolUsage; PoolType = info->PoolType; GenericMapping = new GenericMapping(&info->GenericMapping); PeakHandleTableUsage = info->HighWaterHandleTableUsage; PeakNumberOfHandles = info->HighWaterNumberOfHandles; PeakNumberOfObjects = info->HighWaterNumberOfObjects; PeakNonPagedPoolUsage = info->HighWaterNonPagedPoolUsage; PeakPagedPoolUsage = info->HighWaterPagedPoolUsage; TotalNamePoolUsage = info->TotalNamePoolUsage; PeakNamePoolUsage = info->HighWaterNamePoolUsage; DefaultPagedPoolCharge = info->DefaultPagedPoolCharge; DefaultNonPagedPoolCharge = info->DefaultNonPagedPoolCharge; }