// Copyright (C) 1995-1997  Microsoft Corporation.  All Rights Reserved.
//
//  MODULE:   relstat.idl
//
//  PURPOSE:  Relstat RPC service .idl file.  This defines the wire
//            "contract" between a client and server using this
//            interface.  All data types and functions (methods,
//            operations) that go over the wire must be defined here.
//
//
[
uuid(7f4833fa-fce8-11d2-b8de-0000f8757e72),
version(1.0),
pointer_default(unique)
]
interface RelstatRPCService 
{
import "wtypes.idl";

typedef struct _RELSTAT_PROCESS_INFO{
ULONG NumberOfThreads;
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
LPWSTR szImageName;
LONG BasePriority;                  //KPRIORITY in ntexapi.h
DWORD UniqueProcessId;             //HANDLE in ntexapi.h
DWORD InheritedFromUniqueProcessId;  //HANDLE in ntexapi.h
ULONG HandleCount;
ULONG SessionId;
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
SIZE_T PrivatePageCount;
LARGE_INTEGER ReadOperationCount;
LARGE_INTEGER WriteOperationCount;
LARGE_INTEGER OtherOperationCount;
LARGE_INTEGER ReadTransferCount;
LARGE_INTEGER WriteTransferCount;
LARGE_INTEGER OtherTransferCount;
ULONG GdiHandleCount;
ULONG UsrHandleCount;
} RELSTAT_PROCESS_INFO, *PRELSTAT_PROCESS_INFO;

typedef struct _RELSTAT_POOLTAG_INFO {
    UCHAR Tag[4];
    ULONG PagedAllocs;
    ULONG PagedFrees;
    SIZE_T PagedUsed;
    ULONG NonPagedAllocs;
    ULONG NonPagedFrees;
    SIZE_T NonPagedUsed;
} RELSTAT_POOLTAG_INFO, *PRELSTAT_POOLTAG_INFO;



    error_status_t 
	    RelStatProcessInfo(
        	[in] handle_t Binding,
        	[in] long Pid,
	        [in, out] unsigned long *pNumberOfProcesses,
        	[out, size_is(,*pNumberOfProcesses)] 
	           PRELSTAT_PROCESS_INFO *ppRelStatInfo
        	);

   error_status_t 
        RelStatPoolTagInfo(
            [in] handle_t Binding,
            [in] LPSTR szTagName,
            [in, out] unsigned long* pNumberOfTags,
            [out, size_is(,*pNumberOfTags)]
                PRELSTAT_POOLTAG_INFO *ppRelStatPoolInfo
            );

    error_status_t
         RelStatBuildNumber(	
            [in] handle_t Binding,
            [in, out] unsigned long *pBuildNumber
            );

    error_status_t
         RelStatTickCount(
            [in] handle_t Binding,
            [in, out] unsigned long* pTickCount
            );
 
}
