6.7 Appendix A.7: allproc.h

For ease of implementation, the full header file is provided.

 #ifndef TS_ALLPROC_ALREADY_SET
 #define TS_ALLPROC_ALREADY_SET
  
 #ifdef  __midl
 cpp_quote( "#define TS_PROCESS_INFO_MAGIC_NT4  0x23495452" )
 #else
 #define TS_PROCESS_INFO_MAGIC_NT4  0x23495452
 #endif
  
 typedef struct _TS_PROCESS_INFORMATION_NT4 {
     ULONG MagicNumber;
     ULONG LogonId;
     PVOID ProcessSid;
     ULONG Pad;
 } TS_PROCESS_INFORMATION_NT4, * PTS_PROCESS_INFORMATION_NT4;
  
 // sizes of TS4.0 structures (size has changed in Windows 2000)
 #ifdef  __midl
 cpp_quote( "#define SIZEOF_TS4_SYSTEM_THREAD_INFORMATION    64" )
 cpp_quote( "#define SIZEOF_TS4_SYSTEM_PROCESS_INFORMATION   136" )
 #else
 #define SIZEOF_TS4_SYSTEM_THREAD_INFORMATION 64
 #define SIZEOF_TS4_SYSTEM_PROCESS_INFORMATION 136
 #endif
  
  
 #ifdef  __midl
 cpp_quote( "#define GAP_LEVEL_BASIC 0" )
 #else
 #define GAP_LEVEL_BASIC 0
 #endif
  
 typedef struct _TS_UNICODE_STRING {
     USHORT Length;
     USHORT MaximumLength;
 #ifdef __midl
     [size_is(MaximumLength),length_is(Length)]PWSTR  Buffer;
 #else
     PWSTR  Buffer;
 #endif
 } TS_UNICODE_STRING;
  
  
 typedef struct _TS_SYS_PROCESS_INFORMATION {
     ULONG NextEntryOffset;
     ULONG NumberOfThreads;
     LARGE_INTEGER SpareLi1;
     LARGE_INTEGER SpareLi2;
     LARGE_INTEGER SpareLi3;
     LARGE_INTEGER CreateTime;
     LARGE_INTEGER UserTime;
     LARGE_INTEGER KernelTime;
     TS_UNICODE_STRING ImageName;
     LONG BasePriority;                     // KPRIORITY in ntexapi.h
     DWORD UniqueProcessId;                 // HANDLE in ntexapi.h
     DWORD InheritedFromUniqueProcessId;    // HANDLE in ntexapi.h
     ULONG HandleCount;
     ULONG SessionId;
     ULONG SpareUl3;
     SIZE_T PeakVirtualSize;
     SIZE_T VirtualSize;
     ULONG PageFaultCount;
     ULONG PeakWorkingSetSize;
     ULONG WorkingSetSize;
     SIZE_T QuotaPeakPagedPoolUsage;
     SIZE_T QuotaPagedPoolUsage;
     SIZE_T QuotaPeakNonPagedPoolUsage;
     SIZE_T QuotaNonPagedPoolUsage;
     SIZE_T PagefileUsage;
     SIZE_T PeakPagefileUsage;
     SIZE_T PrivatePageCount;
 } 
 TS_SYS_PROCESS_INFORMATION, *PTS_SYS_PROCESS_INFORMATION;
  
 typedef struct _TS_ALL_PROCESSES_INFO {
     PTS_SYS_PROCESS_INFORMATION pTsProcessInfo;
     DWORD                           SizeOfSid;
 #ifdef __midl
     [size_is(SizeOfSid)] PBYTE      pSid;
 #else
     PBYTE                           pSid;
 #endif
 } 
 TS_ALL_PROCESSES_INFO, *PTS_ALL_PROCESSES_INFO;
  
  
 //=======================================================================
  
 // The following structures are defined for taking care of interface 
 // change in Whistler.
  
 typedef struct _NT6_TS_UNICODE_STRING {
     USHORT Length;
     USHORT MaximumLength;
 #ifdef __midl
     [size_is(MaximumLength / 2),length_is(Length / 2)]PWSTR  Buffer;
 #else
     PWSTR  Buffer;
 #endif
 } NT6_TS_UNICODE_STRING;
  
  
 typedef struct _TS_SYS_PROCESS_INFORMATION_NT6 {
     ULONG NextEntryOffset;
     ULONG NumberOfThreads;
     LARGE_INTEGER SpareLi1;
     LARGE_INTEGER SpareLi2;
     LARGE_INTEGER SpareLi3;
     LARGE_INTEGER CreateTime;
     LARGE_INTEGER UserTime;
     LARGE_INTEGER KernelTime;
     NT6_TS_UNICODE_STRING ImageName;
     LONG BasePriority;                     // KPRIORITY in ntexapi.h
     DWORD UniqueProcessId;                 // HANDLE in ntexapi.h
     DWORD InheritedFromUniqueProcessId;    // HANDLE in ntexapi.h
     ULONG HandleCount;
     ULONG SessionId;
     ULONG SpareUl3;
     SIZE_T PeakVirtualSize;
     SIZE_T VirtualSize;
     ULONG PageFaultCount;
     ULONG PeakWorkingSetSize;
     ULONG WorkingSetSize;
     SIZE_T QuotaPeakPagedPoolUsage;
     SIZE_T QuotaPagedPoolUsage;
     SIZE_T QuotaPeakNonPagedPoolUsage;
     SIZE_T QuotaNonPagedPoolUsage;
     SIZE_T PagefileUsage;
     SIZE_T PeakPagefileUsage;
     SIZE_T PrivatePageCount;
 } 
 TS_SYS_PROCESS_INFORMATION_NT6, *PTS_SYS_PROCESS_INFORMATION_NT6;
  
 typedef struct _TS_ALL_PROCESSES_INFO_NT6 {
     PTS_SYS_PROCESS_INFORMATION_NT6 pTsProcessInfo;
     DWORD                           SizeOfSid;
 #ifdef __midl
     [size_is(SizeOfSid)] PBYTE      pSid;
 #else
     PBYTE                           pSid;
 #endif
 } 
 TS_ALL_PROCESSES_INFO_NT6, *PTS_ALL_PROCESSES_INFO_NT6;
  
 //=========================================================================================
  
 //
 // TermSrv Counter Header
 // 
 typedef struct _TS_COUNTER_HEADER {
     DWORD dwCounterID;     // identifies counter
     boolean bResult;       // result of operation performed on counter
 } TS_COUNTER_HEADER, *PTS_COUNTER_HEADER;
  
 typedef struct _TS_COUNTER {
     TS_COUNTER_HEADER counterHead; 
     DWORD             dwValue;      // returned value
     LARGE_INTEGER     startTime;    // start time for counter
 } TS_COUNTER, *PTS_COUNTER;
  
 #endif  //  TS_ALLPROC_ALREADY_SET
  
 #define  TSVIP_MAX_ADAPTER_ADDRESS_LENGTH  16
  
 typedef  struct  _TSVIP_SOCKADDR {
 #ifdef __midl
     union switch (unsigned short sin_family) u
     {
      case 2:                       // AF_INET
         struct {
             USHORT  sin_port;
             ULONG   in_addr;
             UCHAR   sin_zero[8];
         }  ipv4;
      case 23:                      // AF_INET6
         struct {
             USHORT  sin6_port;
             ULONG   sin6_flowinfo;
             USHORT  sin6_addr[8];
             ULONG   sin6_scope_id;
         }  ipv6;
     };
 #else
     USHORT  sin_family;
     union
     {
         struct  {
             USHORT  sin_port;
             ULONG   in_addr;
             UCHAR   sin_zero[8];
         }  ipv4;
         struct {
             USHORT  sin6_port;
             ULONG   sin6_flowinfo;
             USHORT  sin6_addr[8];
             ULONG   sin6_scope_id;
         }  ipv6;
     }  u;
 #endif
 }  TSVIP_SOCKADDR,
    *PTSVIP_SOCKADDR;
  
 typedef  struct  _TSVIPAddress {
     DWORD             dwVersion;   //Structure version
     TSVIP_SOCKADDR    IPAddress;    //IPv4 is in network byte order.
     ULONG             PrefixOrSubnetMask;    //IPv4 is a mask in network byte order,
 #ifdef  __midl                                //IPv6 is prefix length.
     [range(0, TSVIP_MAX_ADAPTER_ADDRESS_LENGTH)]  
       UINT            PhysicalAddressLength;
     [length_is(PhysicalAddressLength)] 
       BYTE  PhysicalAddress[TSVIP_MAX_ADAPTER_ADDRESS_LENGTH];
 #else
     UINT              PhysicalAddressLength;
     BYTE              PhysicalAddress[TSVIP_MAX_ADAPTER_ADDRESS_LENGTH];
 #endif
     ULONG             LeaseExpires;
     ULONG             T1;
     ULONG             T2;
 }  TSVIPAddress,
    *PTSVIPAddress;
  
 typedef  struct  _TSVIPSession {
     DWORD             dwVersion;   //Structure version
     DWORD             SessionId;   //Session ID
     TSVIPAddress      SessionIP;   //IPAddress assign to session
 }  TSVIPSession,
    *PTSVIPSession;    
  
 //NBD   end