/* * Process Hacker - * windows API structs * * Copyright (C) 2009 Uday Shanbhag * Copyright (C) 2009 Dean * Copyright (C) 2008-2009 wj32 * * This file is part of Process Hacker. * * Process Hacker is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Process Hacker is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Process Hacker. If not, see . */ using System; using System.Drawing; using System.Runtime.InteropServices; using ProcessHacker.Native.Objects; namespace ProcessHacker.Native.Api { [StructLayout(LayoutKind.Sequential)] public struct Address64 { public long Offset; public short Segment; public AddressMode Mode; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct CatalogInfo { public int Size; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string CatalogFile; } [StructLayout(LayoutKind.Sequential)] public struct ClientId { public int UniqueProcess; public int UniqueThread; } // NOTE: This x86 CONTEXT ONLY!!! [StructLayout(LayoutKind.Sequential)] public struct Context { public ContextFlags ContextFlags; public int Dr0; public int Dr1; public int Dr2; public int Dr3; public int Dr4; public int Dr5; public int Dr6; public int Dr7; [MarshalAs(UnmanagedType.Struct)] public FloatingSaveArea FloatSave; public int SegGs; public int SegFs; public int SegEs; public int SegDs; public int Edi; public int Esi; public int Ebx; public int Edx; public int Ecx; public int Eax; public int Ebp; public int Eip; public int SegCs; public int EFlags; public int Esp; public int SegSs; public unsafe fixed byte ExtendedRegisters[Win32.MaximumSupportedExtension]; } [StructLayout(LayoutKind.Sequential)] public struct EnumServiceStatus { [MarshalAs(UnmanagedType.LPTStr)] public string ServiceName; [MarshalAs(UnmanagedType.LPTStr)] public string DisplayName; [MarshalAs(UnmanagedType.Struct)] public ServiceStatus ServiceStatus; } [StructLayout(LayoutKind.Sequential)] public struct EnumServiceStatusProcess { [MarshalAs(UnmanagedType.LPTStr)] public string ServiceName; [MarshalAs(UnmanagedType.LPTStr)] public string DisplayName; [MarshalAs(UnmanagedType.Struct)] public ServiceStatusProcess ServiceStatusProcess; } [StructLayout(LayoutKind.Sequential)] public struct EventBasicInformation { public EventType EventType; public int EventState; } [StructLayout(LayoutKind.Sequential)] public struct FloatingSaveArea { public int ControlWord; public int StatusWord; public int TagWord; public int ErrorOffset; public int ErrorSelector; public int DataOffset; public int DataSelector; public unsafe fixed byte RegisterArea[Win32.SizeOf80387Registers]; public int Cr0NpxState; } [StructLayout(LayoutKind.Sequential)] public struct FpoData { public int ulOffStart; public int cbProcSize; public int cdwLocals; public short cdwParams; public long Part1; public long Part2; } [StructLayout(LayoutKind.Sequential)] public struct GenericMapping { public int GenericRead; public int GenericWrite; public int GenericExecute; public int GenericAll; } [StructLayout(LayoutKind.Sequential)] public struct Guid { public uint Data1; public ushort Data2; public ushort Data3; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] Data4; } [StructLayout(LayoutKind.Sequential)] public struct HeapEntry32 { public int dwSize; public int hHandle; public int dwAddress; public int dwBlockSize; public HeapEntry32Flags dwFlags; public int dwLockCount; public int dwResvd; public int th32ProcessID; public int th32HeapID; } [StructLayout(LayoutKind.Sequential)] public struct HeapList32 { public int dwSize; public int th32ProcessID; public int th32HeapID; public int dwFlags; } [StructLayout(LayoutKind.Sequential)] public struct IoCounters { public ulong ReadOperationCount; public ulong WriteOperationCount; public ulong OtherOperationCount; public ulong ReadTransferCount; public ulong WriteTransferCount; public ulong OtherTransferCount; } [StructLayout(LayoutKind.Sequential)] public struct KdHelp64 { public long Thread; public int ThCallbackStack; public int ThCallbackBSTore; public int NextCallback; public int FramePointer; public long KiCallUserMode; public long KeUserCallbackDispatcher; public long SystemRangeStart; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public long[] Reserved; } [StructLayout(LayoutKind.Sequential)] public struct LdrModule { public ListEntry InLoadOrderModuleList; public ListEntry InMemoryOrderModuleList; public ListEntry InInitializationOrderModuleList; public int BaseAddress; public int EntryPoint; public int SizeOfImage; public UnicodeString FullDllName; public UnicodeString BaseDllName; public int Flags; public short LoadCount; public short TlsIndex; public ListEntry HashTableEntry; public int TimeDateStamp; } [StructLayout(LayoutKind.Sequential)] public struct ListEntry { public IntPtr Flink; public IntPtr Blink; } [StructLayout(LayoutKind.Sequential)] public struct Luid { public int LowPart; public int HighPart; } [StructLayout(LayoutKind.Sequential)] public struct LuidAndAttributes { public Luid Luid; public SePrivilegeAttributes Attributes; } [StructLayout(LayoutKind.Sequential)] public struct MemoryBasicInformation { public int BaseAddress; public int AllocationBase; public MemoryProtection AllocationProtect; public int RegionSize; public MemoryState State; public MemoryProtection Protect; public MemoryType Type; } [StructLayout(LayoutKind.Sequential)] public struct MibTcpRow { public MibTcpState State; public uint LocalAddress; public int LocalPort; public uint RemoteAddress; public int RemotePort; } [StructLayout(LayoutKind.Sequential)] public struct MibTcpRowOwnerPid { public MibTcpState State; public uint LocalAddress; public int LocalPort; public uint RemoteAddress; public int RemotePort; public int OwningProcessId; } [StructLayout(LayoutKind.Sequential)] public struct MibTcpStats { public int RtoAlgorithm; public int RtoMin; public int RtoMax; public int MaxConn; public int ActiveOpens; public int PassiveOpens; public int AttemptFails; public int EstabResets; public int CurrEstab; public int InSegs; public int OutSegs; public int RetransSegs; public int InErrs; public int OutRsts; public int NumConns; } [StructLayout(LayoutKind.Sequential)] public struct MibTcpTable { public int NumEntries; public MibTcpRow[] Table; } [StructLayout(LayoutKind.Sequential)] public struct MibTcpTableOwnerPid { public int NumEntries; public MibTcpRowOwnerPid[] Table; } [StructLayout(LayoutKind.Sequential)] public struct MibUdpRow { public uint LocalAddress; public int LocalPort; } [StructLayout(LayoutKind.Sequential)] public struct MibUdpTable { public int NumEntries; public MibUdpRow[] Table; } [StructLayout(LayoutKind.Sequential)] public struct MibUdpRowOwnerPid { public uint LocalAddress; public int LocalPort; public int OwningProcessId; } [StructLayout(LayoutKind.Sequential)] public struct MibUdpStats { public int InDatagrams; public int NoPorts; public int InErrors; public int OutDatagrams; public int NumAddrs; } [StructLayout(LayoutKind.Sequential)] public struct MibUdpTableOwnerPid { public int NumEntries; public MibUdpRowOwnerPid[] Table; } [StructLayout(LayoutKind.Sequential)] public struct ModuleEntry32 { public int dwSize; public int th32ModuleID; public int th32ProcessID; public int GlblcntUsage; public int ProccntUsage; public int modBaseAddr; public int modBaseSize; public int hModule; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szModule; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string szExePath; public int dwFlags; } [StructLayout(LayoutKind.Sequential)] public struct ModuleInfo { public IntPtr BaseOfDll; public int SizeOfImage; public IntPtr EntryPoint; } [StructLayout(LayoutKind.Sequential)] public struct MonitorInformation { public uint Size; public Rectangle MonitorRectangle; public Rectangle WorkRectangle; public uint Flags; } [StructLayout(LayoutKind.Sequential)] public struct MutantBasicInformation { public int CurrentCount; public byte OwnedByCaller; public byte AbandonedState; } [StructLayout(LayoutKind.Sequential)] public struct ObjectAttributes { public int Length; public int RootDirectory; public IntPtr ObjectName; public uint Attributes; public int SecurityDescriptor; public int SecurityQualityOfService; } [StructLayout(LayoutKind.Sequential)] public struct ObjectBasicInformation { public uint Attributes; public int GrantedAccess; public uint HandleCount; public uint PointerCount; public uint PagedPoolUsage; public uint NonPagedPoolUsage; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public uint[] Reserved; public uint NameInformationLength; public uint TypeInformationLength; public uint SecurityDescriptorLength; public ulong CreateTime; } [StructLayout(LayoutKind.Sequential)] public struct ObjectNameInformation { public UnicodeString Name; } [StructLayout(LayoutKind.Sequential)] public struct ObjectTypeInformation { public UnicodeString Name; public int TotalNumberOfObjects; public int TotalNumberOfHandles; public int TotalPagedPoolUsage; public int TotalNonPagedPoolUsage; public int TotalNamePoolUsage; public int TotalHandleTableUsage; public int HighWaterNumberOfObjects; public int HighWaterNumberOfHandles; public int HighWaterPagedPoolUsage; public int HighWaterNonPagedPoolUsage; public int HighWaterNamePoolUsage; public int HighWaterHandleTableUsage; public int InvalidAttributes; public GenericMapping GenericMapping; public int ValidAccess; public byte SecurityRequired; public byte MaintainHandleCount; public ushort MaintainTypeList; public PoolType PoolType; public int PagedPoolUsage; public int NonPagedPoolUsage; } [StructLayout(LayoutKind.Sequential)] public struct PebLdrData { public int Length; public char Initialized; public int SsHandle; public ListEntry InLoadOrderModuleList; public ListEntry InMemoryOrderModuleList; public ListEntry InInitializationOrderModuleList; } [StructLayout(LayoutKind.Sequential)] public struct PerformanceInformation { public int Size; public int CommitTotal; public int CommitLimit; public int CommitPeak; public int PhysicalTotal; public int PhysicalAvailable; public int SystemCache; public int KernelTotal; public int KernelPaged; public int KernelNonPaged; public int PageSize; public int HandlesCount; public int ProcessCount; public int ThreadCount; } [StructLayout(LayoutKind.Sequential)] public struct PooledUsageAndLimits { public int PeakPagedPoolUsage; public int PagedPoolUsage; public int PagedPoolLimit; public int PeakNonPagedPoolUsage; public int NonPagedPoolUsage; public int NonPagedPoolLimit; public int PeakPagefileUsage; public int PagefileUsage; public int PagefileLimit; } [StructLayout(LayoutKind.Sequential)] public struct ProcessBasicInformation { public int ExitStatus; public int PebBaseAddress; public int AffinityMask; public int BasePriority; public int UniqueProcessId; public int InheritedFromUniqueProcessId; } [StructLayout(LayoutKind.Sequential)] public struct ProcessEntry32 { public int dwSize; public int cntUsage; public int th32ProcessID; public int th32DefaultHeapID; public int th32ModuleID; public int cntThreads; public int th32ParentProcessID; public int pcPriClassBase; public int dwFlags; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szExeFile; } [StructLayout(LayoutKind.Sequential)] public struct ProcessInformation { public int hProcess; public int hThread; public int dwProcessId; public int dwThreadId; } [StructLayout(LayoutKind.Sequential)] public struct QueryServiceConfig { public ServiceType ServiceType; public ServiceStartType StartType; public ServiceErrorControl ErrorControl; [MarshalAs(UnmanagedType.LPTStr)] public string BinaryPathName; [MarshalAs(UnmanagedType.LPTStr)] public string LoadOrderGroup; public int TagID; public int Dependencies; // pointer to a string array [MarshalAs(UnmanagedType.LPTStr)] public string ServiceStartName; [MarshalAs(UnmanagedType.LPTStr)] public string DisplayName; } [StructLayout(LayoutKind.Sequential)] public struct QuotaLimits { public int PagedPoolLimit; public int NonPagedPoolLimit; public int MinimumWorkingSetSize; public int MaximumWorkingSetSizse; public int PagefileLimit; public long TimeLimit; } [StructLayout(LayoutKind.Sequential)] public struct ScAction { public ScActionType Type; public int Delay; } [StructLayout(LayoutKind.Sequential)] public struct SectionBasicInformation { public int Unknown; public SectionAttributes SectionAttributes; public long SectionSize; } [StructLayout(LayoutKind.Sequential)] public struct SectionImageInformation { public int EntryPoint; public int StackZeroBits; public int StackReserved; public int StackCommit; public int ImageSubsystem; public short SubSystemVersionLow; public short SubSystemVersionHigh; public int Unknown1; public int ImageCharacteristics; public int ImageMachineType; public int Unknown2; public int Unknown3; public int Unknown4; } [StructLayout(LayoutKind.Sequential)] public struct ServiceDescription { [MarshalAs(UnmanagedType.LPWStr)] public string Description; } [StructLayout(LayoutKind.Sequential)] public struct ServiceStatus { public ServiceType ServiceType; public ServiceState CurrentState; public ServiceAccept ControlsAccepted; public int Win32ExitCode; public int ServiceSpecificExitCode; public int CheckPoint; public int WaitHint; } [StructLayout(LayoutKind.Sequential)] public struct ServiceStatusProcess { public ServiceType ServiceType; public ServiceState CurrentState; public ServiceAccept ControlsAccepted; public int Win32ExitCode; public int ServiceSpecificExitCode; public int CheckPoint; public int WaitHint; public int ProcessID; public ServiceFlags ServiceFlags; } [StructLayout(LayoutKind.Sequential)] public struct ShellExecuteInfo { public int cbSize; public int fMask; public IntPtr hWnd; public string lpVerb; public string lpFile; public string lpParameters; public string lpDirectory; public ShowWindowType nShow; public short unused; public int hInstApp; public int lpIDList; public string lpClass; public int hkeyClass; public int dwHotKey; public int hIcon; public int hProcess; } [StructLayout(LayoutKind.Sequential)] public struct ShFileInfo { public IntPtr hIcon; public IntPtr iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; } [StructLayout(LayoutKind.Sequential)] public struct SidAndAttributes { public int SID; // ptr to a SID object public SidAttributes Attributes; } [StructLayout(LayoutKind.Sequential)] public struct StackFrame64 { public Address64 AddrPC; public Address64 AddrReturn; public Address64 AddrFrame; public Address64 AddrStack; public Address64 AddrBStore; public int FuncTableEntry; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public long[] Params; public int Far; public int Virtual; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public long[] Reserved; KdHelp64 KdHelp; } [StructLayout(LayoutKind.Sequential)] public struct StartupInfo { public int Size; public int Reserved; [MarshalAs(UnmanagedType.LPWStr)] public string Desktop; [MarshalAs(UnmanagedType.LPWStr)] public string Title; public int X; public int Y; public int XSize; public int YSize; public int XCountChars; public int YCountChars; public int FillAttribute; public StartupFlags Flags; public ShowWindowType ShowWindow; public short Reserved2; public int Reserved3; public int StdInputHandle; public int StdOutputHandle; public int StdErrorHandle; } [StructLayout(LayoutKind.Sequential)] public struct SymbolInfo { public int SizeOfStruct; public int TypeIndex; public unsafe fixed long Reserved[2]; public int Index; public int Size; public long ModBase; public SymbolFlags Flags; public long Value; public long Address; public int Register; public int Scope; public int Tag; public int NameLen; public int MaxNameLen; public char Name; } [StructLayout(LayoutKind.Sequential)] public struct SystemBasicInformation { public int Reserved; public int TimerResolution; public int PageSize; public int NumberOfPhysicalPages; public int LowestPhysicalPageNumber; public int HighestPhysicalPageNumber; public int AllocationGranularity; public int MinimumUserModeAddress; public int MaximumUserModeAddress; public int ActiveProcessorsAffinityMask; public byte NumberOfProcessors; } [StructLayout(LayoutKind.Sequential)] public struct SystemCacheInformation { /// /// The size of the system working set, in bytes. /// public int SystemCacheWsSize; public int SystemCacheWsPeakSize; public int SystemCacheWsFaults; /// /// Measured in pages. /// public int SystemCacheWsMinimum; /// /// Measured in pages. /// public int SystemCacheWsMaximum; public int TransitionSharedPages; public int TransitionSharedPagesPeak; public int Reserved1; public int Reserved2; } [StructLayout(LayoutKind.Sequential)] public struct SystemExtendedThreadInformation { public SystemThreadInformation ThreadInfo; public int StackBase; // 16 public int StackLimit; public int Win32StartAddress; public int TebAddress; // Vista+ public int Unused1; public int Unused2; public int Unused3; } [StructLayout(LayoutKind.Sequential)] public struct SystemLoadAndCallImage { public UnicodeString ModuleName; } [StructLayout(LayoutKind.Sequential)] public struct SystemObjectTypeInformation { public int NextEntryOffset; public UnicodeString Name; public int ObjectCount; public int HandleCount; public int TypeNumber; public int InvalidAttributes; public GenericMapping GenericMapping; public int ValidAccessMask; public PoolType PoolType; } [StructLayout(LayoutKind.Sequential)] public struct SystemPerformanceInformation { /// /// The total idle time of all processors in units of 100-nanoseconds. /// public long IdleTime; /// /// Total bytes read by calls to NtReadFile. /// public long IoReadTransferCount; /// /// Total bytes written by calls to NtWriteFile. /// public long IoWriteTransferCount; /// /// Total bytes transferred by other I/O operations. /// public long IoOtherTransferCount; /// /// Number of calls to NtReadFile. /// public int IoReadOperationCount; /// /// Number of calls to NtWriteFile. /// public int IoWriteOperationCount; /// /// Number of calls to other I/O functions. /// public int IoOtherOperationCount; /// /// The number of pages of physical memory available. /// public int AvailablePages; /// /// The number of pages of committed virtual memory. /// public int CommittedPages; /// /// The number of pages of virtual memory that could be committed /// without extending the system's pagefiles. /// public int CommitLimit; /// /// The peak number of pages of committed virtual memory. /// public int PeakCommitment; /// /// The total number of soft and hard page faults. /// public int PageFaults; /// /// The number of copy-on-write page faults. /// public int CopyOnWriteFaults; /// /// The number of soft page faults. /// public int TransitionFaults; /// /// Something that the Native API reference book doesn't have. /// public int CacheTransitionFaults; /// /// The number of demand zero faults. /// public int DemandZeroFaults; /// /// The number of pages read from disk to resolve page faults. /// public int PagesRead; /// /// The number of read operations initiated to resolve page faults. /// public int PagesReadIos; public int CacheRead; public int CacheReadIos; /// /// The number of pages written to the system's pagefiles. /// public int PagefilePagesWritten; /// /// The number of write operations performed on the system's pagefiles. /// public int PagefilePagesWriteIos; /// /// The number of pages written to mapped files. /// public int MappedFilePagesWritten; /// /// The number of write operations performed on mapped files. /// public int MappedFilePageWriteIos; /// /// The number of pages used by the paged pool. /// public int PagedPoolUsage; /// /// The number of pages used by the non-paged pool. /// public int NonPagedPoolUsage; /// /// The number of allocations made from the paged pool. /// public int PagedPoolAllocs; /// /// The number of allocations returned to the paged pool. /// public int PagedPoolFrees; /// /// The number of allocations made from the non-paged pool. /// public int NonPagedPoolAllocs; /// /// The number of allocations returned to the non-paged pool. /// public int NonPagedPoolFrees; /// /// The number of available System Page Table Entries. /// public int FreeSystemPtes; /// /// The number of pages of pageable OS code and data in physical /// memory. /// public int SystemCodePages; /// /// The number of pages of pageable driver code and data. /// public int TotalSystemDriverPages; /// /// The number of pages of OS driver code and data. /// public int TotalSystemCodePages; /// /// The number of times an allocation could be statisfied by one of the /// small non-paged lookaside lists. /// public int SmallNonPagedPoolLookasideListAllocateHits; /// /// The number of times an allocation could be statisfied by one of the /// small paged lookaside lists. /// public int SmallPagedPoolLookasideAllocateHits; public int Reserved3; /// /// The number of pages of the system cache in physical memory. /// public int SystemCachePages; /// /// The number of pages of the paged pool in physical memory. /// public int PagedPoolPages; /// /// The number of pages of pageable driver code and data in physical memory. /// public int SystemDriverPages; /// /// The number of asynchronous fast read operations. /// public int FastReadNoWait; /// /// The number of synchronous fast read operations. /// public int FastReadWait; /// /// The number of fast read operations not possible because of resource /// conflicts. /// public int FastReadResourceMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int FastReadNotPossible; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int FastMdlReadNoWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int FastMdlReadWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int FastMdlReadResourceMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int FastMdlReadNotPossible; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MapDataNoWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MapDataWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MapDataNoWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MapDataWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int PinMappedDataCount; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int PinReadNoWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int PinReadWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int PinReadNoWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int PinReadWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int CopyReadNoWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int CopyReadWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int CopyReadNoWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int CopyReadWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MdlReadNoWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MdlReadWait; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MdlReadNoWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int MdlReadWaitMiss; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int ReadAheadIos; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int LazyWriteIos; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int LazyWritePages; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int DataFlushes; /// /// Google Books won't let me read the page containing the description /// for this field! /// public int DataPages; /// /// The total number of context switches. /// public int ContextSwitches; /// /// The number of first level translation buffer fills. /// public int FirstLevelTbFills; /// /// The number of second level translation buffer fills. /// public int SecondLevelTbFills; /// /// The number of system calls executed. /// public int SystemCalls; } [StructLayout(LayoutKind.Sequential)] public struct SystemProcessInformation { public int NextEntryOffset; public int NumberOfThreads; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public long[] Spare; public long CreateTime; // 8 public long UserTime; public long KernelTime; public UnicodeString ImageName; public int BasePriority; public int ProcessId; public int InheritedFromProcessId; public int HandleCount; public int SessionId; public int PageDirectoryBase; public VmCountersEx VirtualMemoryCounters; public IoCounters IoCounters; } [StructLayout(LayoutKind.Sequential)] public struct SystemProcessorPerformanceInformation { public long IdleTime; public long KernelTime; public long UserTime; public long DpcTime; public long InterruptTime; public int InterruptCount; } [StructLayout(LayoutKind.Sequential)] public struct SystemSessionProcessInformation { public int SessionId; public int BufferLength; public IntPtr Buffer; } [StructLayout(LayoutKind.Sequential)] public struct SystemThreadInformation { public long KernelTime; public long UserTime; public long CreateTime; public int WaitTime; public int StartAddress; public ClientId ClientId; public int Priority; public int BasePriority; public int ContextSwitchCount; // 12 public int State; // 13 public KWaitReason WaitReason; // 14 } [StructLayout(LayoutKind.Sequential)] public struct ThreadBasicInformation { public int ExitStatus; public int TebBaseAddress; public ClientId ClientId; public int AffinityMask; public int Priority; public int BasePriority; } [StructLayout(LayoutKind.Sequential)] public struct ThreadEntry32 { public int dwSize; public int cntUsage; public int th32ThreadID; public int th32OwnerProcessID; public int tpBasePri; public int tpDeltaPri; public int dwFlags; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szExeFile; } [StructLayout(LayoutKind.Sequential)] public struct TokenGroups { public uint GroupCount; [MarshalAs(UnmanagedType.ByValArray)] public SidAndAttributes[] Groups; } [StructLayout(LayoutKind.Sequential)] public struct TokenPrivileges { public uint PrivilegeCount; [MarshalAs(UnmanagedType.ByValArray)] public LuidAndAttributes[] Privileges; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct TokenSource { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string SourceName; public Luid SourceIdentifier; } [StructLayout(LayoutKind.Sequential)] public struct TokenUser { public SidAndAttributes User; } [StructLayout(LayoutKind.Sequential)] public struct UnicodeString { public ushort Length; public ushort MaximumLength; public int Buffer; } [StructLayout(LayoutKind.Sequential)] public struct VmCounters { public int PeakVirtualSize; public int VirtualSize; public int PageFaultCount; public int PeakWorkingSetSize; public int WorkingSetSize; public int QuotaPeakPagedPoolUsage; public int QuotaPagedPoolUsage; public int QuotaPeakNonPagedPoolUsage; public int QuotaNonPagedPoolUsage; public int PagefileUsage; public int PeakPagefileUsage; } [StructLayout(LayoutKind.Sequential)] public struct VmCountersEx { public int PeakVirtualSize; public int VirtualSize; public int PageFaultCount; public int PeakWorkingSetSize; public int WorkingSetSize; public int QuotaPeakPagedPoolUsage; public int QuotaPagedPoolUsage; public int QuotaPeakNonPagedPoolUsage; public int QuotaNonPagedPoolUsage; public int PagefileUsage; public int PeakPagefileUsage; public int PrivateBytes; } [StructLayout(LayoutKind.Sequential)] public struct WindowClass { public int Styles; [MarshalAs(UnmanagedType.FunctionPtr)] public Win32.WndProcDelegate WindowsProc; private int ExtraClassData; private int ExtraWindowData; public IntPtr InstanceHandle; public IntPtr IconHandle; public IntPtr CursorHandle; public IntPtr backgroundBrush; [MarshalAs(UnmanagedType.LPTStr)] public string MenuName; [MarshalAs(UnmanagedType.LPTStr)] public string ClassName; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct WintrustCatalogInfo { public int Size; public int CatalogVersion; public string CatalogFilePath; public string MemberTag; public string MemberFilePath; public int MemberFile; public byte[] CalculatedFileHash; public int CalculatedFileHashSize; public int CatalogContext; } [StructLayout(LayoutKind.Sequential)] public struct WintrustData { public int Size; public int PolicyCallbackData; public int SIPClientData; public int UIChoice; public int RevocationChecks; public int UnionChoice; public IntPtr UnionData; public int StateAction; public int StateData; public int URLReference; public int ProvFlags; public int UIContext; } [StructLayout(LayoutKind.Sequential)] public struct WintrustFileInfo { public int Size; public IntPtr FilePath; public int FileHandle; public int KnownSubject; } [StructLayout(LayoutKind.Sequential)] public struct WtsClientDisplay { public int HorizontalResolution; public int VerticalResolution; public int ColorDepth; } [StructLayout(LayoutKind.Sequential)] public struct WtsProcessInfo { public int SessionId; public int ProcessId; [MarshalAs(UnmanagedType.LPTStr)] public string ProcessName; public int Sid; } [StructLayout(LayoutKind.Sequential)] public struct WtsSessionInfo { public int SessionID; [MarshalAs(UnmanagedType.LPTStr)] public string WinStationName; WtsConnectStateClass State; } }