A DWORD
là uint
và WORD
là ushort
.
[StructLayout(LayoutKind.Sequential)]
struct CACHE_DESCRIPTOR
{
public byte Level;
public byte Associativity;
public ushort LineSize;
public uint Size;
public PROCESSOR_CACHE_TYPE Type;
}
enum PROCESSOR_CACHE_TYPE
{
Unified = 0,
Instruction = 1,
Data = 2,
Trace = 3,
}
Một union
là một cấu trúc với một bố trí Explicit
và FieldOffset
.
[StructLayout(LayoutKind.Sequential)]
struct SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
public UIntPtr ProcessorMask;
public LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
public ProcessorRelationUnion RelationUnion;
}
[StructLayout(LayoutKind.Explicit)]
struct ProcessorRelationUnion
{
[FieldOffset(0)] public CACHE_DESCRIPTOR Cache;
[FieldOffset(0)] public uint NumaNodeNumber;
[FieldOffset(0)] public byte ProcessorCoreFlags;
[FieldOffset(0)] private UInt64 Reserved1;
[FieldOffset(8)] private UInt64 Reserved2;
}
[StructLayout(LayoutKind.Sequential)]
struct CACHE_DESCRIPTOR
{
public byte Level;
public byte Associativity;
public ushort LineSize;
public uint Size;
public PROCESSOR_CACHE_TYPE Type;
}
enum LOGICAL_PROCESSOR_RELATIONSHIP : uint
{
ProcessorCore = 0,
NumaNode = 1,
RelationCache = 2,
}
A ULONGLONG
là UInt64
. Nó đang được sắp xếp cấu trúc đến 8 byte ranh giới (24 byte). Như David đã chỉ ra trong các bình luận, nó là bắt buộc và vì một lý do nào đó nó bị thiếu trong thư viện Microsoft Interop.
Cập nhật: Thêm cấu trúc bị thiếu và liên kết đến Thư viện tương tác Windows từ Microsoft Research.
Nguồn: WindowsInteropLib/Kernel32.cs
Bất kỳ lý do gì để ghi đè? – VMAtm