⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdh.pas

📁 在delphi中实现windows核心编程.原书光盘代码核心编程.原书光盘代码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
//
//   Logging Functions
//

const
  PDH_LOG_READ_ACCESS        = DWORD($00010000);
  {$EXTERNALSYM PDH_LOG_READ_ACCESS}
  PDH_LOG_WRITE_ACCESS       = DWORD($00020000);
  {$EXTERNALSYM PDH_LOG_WRITE_ACCESS}
  PDH_LOG_UPDATE_ACCESS      = DWORD($00040000);
  {$EXTERNALSYM PDH_LOG_UPDATE_ACCESS}
  PDH_LOG_ACCESS_MASK        = DWORD($000F0000);
  {$EXTERNALSYM PDH_LOG_ACCESS_MASK}

  PDH_LOG_CREATE_NEW         = DWORD($00000001);
  {$EXTERNALSYM PDH_LOG_CREATE_NEW}
  PDH_LOG_CREATE_ALWAYS      = DWORD($00000002);
  {$EXTERNALSYM PDH_LOG_CREATE_ALWAYS}
  PDH_LOG_OPEN_ALWAYS        = DWORD($00000003);
  {$EXTERNALSYM PDH_LOG_OPEN_ALWAYS}
  PDH_LOG_OPEN_EXISTING      = DWORD($00000004);
  {$EXTERNALSYM PDH_LOG_OPEN_EXISTING}
  PDH_LOG_CREATE_MASK        = DWORD($0000000F);
  {$EXTERNALSYM PDH_LOG_CREATE_MASK}

  PDH_LOG_OPT_USER_STRING    = DWORD($01000000);
  {$EXTERNALSYM PDH_LOG_OPT_USER_STRING}
  PDH_LOG_OPT_CIRCULAR       = DWORD($02000000);
  {$EXTERNALSYM PDH_LOG_OPT_CIRCULAR}
  PDH_LOG_OPT_MAX_IS_BYTES   = DWORD($04000000);
  {$EXTERNALSYM PDH_LOG_OPT_MAX_IS_BYTES}
  PDH_LOG_OPT_MASK           = DWORD($0F000000);
  {$EXTERNALSYM PDH_LOG_OPT_MASK}

  PDH_LOG_TYPE_UNDEFINED     = 0;
  {$EXTERNALSYM PDH_LOG_TYPE_UNDEFINED}
  PDH_LOG_TYPE_CSV           = 1;
  {$EXTERNALSYM PDH_LOG_TYPE_CSV}
  PDH_LOG_TYPE_TSV           = 2;
  {$EXTERNALSYM PDH_LOG_TYPE_TSV}
  PDH_LOG_TYPE_BINARY        = 3;
  {$EXTERNALSYM PDH_LOG_TYPE_BINARY}
  PDH_LOG_TYPE_TRACE_KERNEL  = 4;
  {$EXTERNALSYM PDH_LOG_TYPE_TRACE_KERNEL}
  PDH_LOG_TYPE_TRACE_GENERIC = 5;
  {$EXTERNALSYM PDH_LOG_TYPE_TRACE_GENERIC}
  PDH_LOG_TYPE_PERFMON       = 6;
  {$EXTERNALSYM PDH_LOG_TYPE_PERFMON}

function PdhOpenLogA(szLogFileName: PAnsiChar; dwAccessFlags: DWORD;
  lpdwLogType: LPDWORD; hQuery: HQUERY; dwMaxRecords: DWORD;
  szUserCaption: PAnsiChar; var phLog: HLOG): Longint; stdcall;
{$EXTERNALSYM PdhOpenLogA}
function PdhOpenLogW(szLogFileName: PWideChar; dwAccessFlags: DWORD;
  lpdwLogType: LPDWORD; hQuery: HQUERY; dwMaxRecords: DWORD;
  szUserCaption: PWideChar; var phLog: HLOG): Longint; stdcall;
{$EXTERNALSYM PdhOpenLogW}
function PdhOpenLog(szLogFileName: PChar; dwAccessFlags: DWORD;
  lpdwLogType: LPDWORD; hQuery: HQUERY; dwMaxRecords: DWORD;
  szUserCaption: PChar; var phLog: HLOG): Longint; stdcall;
{$EXTERNALSYM PdhOpenLog}

function PdhUpdateLogA(hLog: HLOG; szUserString: PAnsiChar): Longint; stdcall;
{$EXTERNALSYM PdhUpdateLogA}
function PdhUpdateLogW(hLog: HLOG; szUserString: PWideChar): Longint; stdcall;
{$EXTERNALSYM PdhUpdateLogW}
function PdhUpdateLog(hLog: HLOG; szUserString: PChar): Longint; stdcall;
{$EXTERNALSYM PdhUpdateLog}

function PdhUpdateLogFileCatalog(hLog: HLOG): Longint; stdcall;
{$EXTERNALSYM PdhUpdateLogFileCatalog}

function PdhGetLogFileSize(hLog: HLOG; var llSize: LONGLONG): Longint; stdcall;
{$EXTERNALSYM PdhGetLogFileSize}

function PdhCloseLog(hLog: HLOG; dwFlags: DWORD): Longint; stdcall;
{$EXTERNALSYM PdhCloseLog}

const
  PDH_FLAGS_CLOSE_QUERY = DWORD($00000001);
  {$EXTERNALSYM PDH_FLAGS_CLOSE_QUERY}

//
//  Data source selection dialog
//

  PDH_FLAGS_FILE_BROWSER_ONLY = DWORD($00000001);
  {$EXTERNALSYM PDH_FLAGS_FILE_BROWSER_ONLY}

function PdhSelectDataSourceA(hWndOwner: HWND; dwFlags: DWORD;
  szDataSource: PAnsiChar; var pcchBufferLength: DWORD): Longint; stdcall;
{$EXTERNALSYM PdhSelectDataSourceA}
function PdhSelectDataSourceW(hWndOwner: HWND; dwFlags: DWORD;
  szDataSource: PWideChar; var pcchBufferLength: DWORD): Longint; stdcall;
{$EXTERNALSYM PdhSelectDataSourceW}
function PdhSelectDataSource(hWndOwner: HWND; dwFlags: DWORD;
  szDataSource: PChar; var pcchBufferLength: DWORD): Longint; stdcall;
{$EXTERNALSYM PdhSelectDataSource}

function PdhIsRealTimeQuery(hQuery: HQUERY): BOOL; stdcall;
{$EXTERNALSYM PdhIsRealTimeQuery}

function PdhSetQueryTimeRange(hQuery: HQUERY; pInfo: PPdhTimeInfo): Longint; stdcall;
{$EXTERNALSYM PdhSetQueryTimeRange}

function PdhGetDataSourceTimeRangeA(szDataSource: PAnsiChar; pdwNumEntries: LPDWORD;
  pInfo: PPdhTimeInfo; pdwBufferSize: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhGetDataSourceTimeRangeA}
function PdhGetDataSourceTimeRangeW(szDataSource: PWideChar; pdwNumEntries: LPDWORD;
  pInfo: PPdhTimeInfo; pdwBufferSize: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhGetDataSourceTimeRangeW}
function PdhGetDataSourceTimeRange(szDataSource: PChar; pdwNumEntries: LPDWORD;
  pInfo: PPdhTimeInfo; pdwBufferSize: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhGetDataSourceTimeRange}

function PdhCollectQueryDataEx(hQuery: HQUERY; dwIntervalTime: DWORD;
  hNewDataEvent: THandle): Longint; stdcall;
{$EXTERNALSYM PdhCollectQueryDataEx}

function PdhFormatFromRawValue(dwCounterType, dwFormat: DWORD;
  var pTimeBase: LONGLONG; pRawValue1, pRawValue2: PPdhRawCounter;
  pFmtValue: PPdhFmtCounterValue): Longint; stdcall;
{$EXTERNALSYM PdhFormatFromRawValue}

function PdhGetCounterTimeBase(hCounter: HCOUNTER; var pTimeBase: LONGLONG): Longint; stdcall;
{$EXTERNALSYM PdhGetCounterTimeBase}

function PdhReadRawLogRecord(hLog: HLOG; ftRecord: TFileTime;
  pRawLogRecord: PPdhRawLogRecord; pdwBufferLength: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhReadRawLogRecord}

const
  DATA_SOURCE_REGISTRY    = DWORD($00000001);
  {$EXTERNALSYM DATA_SOURCE_REGISTRY}
  DATA_SOURCE_LOGFILE     = DWORD($00000002);
  {$EXTERNALSYM DATA_SOURCE_LOGFILE}
  DATA_SOURCE_WBEM        = DWORD($00000004);
  {$EXTERNALSYM DATA_SOURCE_WBEM}

function PdhSetDefaultRealTimeDataSource(dwDataSourceId: DWORD): Longint; stdcall;
{$EXTERNALSYM PdhSetDefaultRealTimeDataSource}

// flags for the log service api's

const
  PDH_LOGSVC_NO_WAIT          = DWORD($80000000);
  {$EXTERNALSYM PDH_LOGSVC_NO_WAIT}
  PDH_LOGSVC_ALL_QUERIES      = DWORD($00000001);
  {$EXTERNALSYM PDH_LOGSVC_ALL_QUERIES}
  PDH_LOGSVC_TRACE_LOG        = DWORD($00000002);
  {$EXTERNALSYM PDH_LOGSVC_TRACE_LOG}

  PDH_LOGSVC_CMD_START        = DWORD($00000010);
  {$EXTERNALSYM PDH_LOGSVC_CMD_START}
  PDH_LOGSVC_CMD_STOP         = DWORD($00000020);
  {$EXTERNALSYM PDH_LOGSVC_CMD_STOP}

  PDH_LOGSVC_CTRL_ADD         = DWORD($00000100);
  {$EXTERNALSYM PDH_LOGSVC_CTRL_ADD}
  PDH_LOGSVC_CTRL_REMOVE      = DWORD($00000200);
  {$EXTERNALSYM PDH_LOGSVC_CTRL_REMOVE}
  PDH_LOGSVC_CTRL_INFO        = DWORD($00000400);
  {$EXTERNALSYM PDH_LOGSVC_CTRL_INFO}

  PDH_LOGSVC_STATUS_RUNNING   = DWORD($00001000);
  {$EXTERNALSYM PDH_LOGSVC_STATUS_RUNNING}
  PDH_LOGSVC_STATUS_STOPPED   = DWORD($00002000);
  {$EXTERNALSYM PDH_LOGSVC_STATUS_STOPPED}
  PDH_LOGSVC_STATUS_PAUSED    = DWORD($00004000);
  {$EXTERNALSYM PDH_LOGSVC_STATUS_PAUSED}
  PDH_LOGSVC_STATUS_ERROR     = DWORD($00008000);
  {$EXTERNALSYM PDH_LOGSVC_STATUS_ERROR}
  PDH_LOGSVC_STATUS_PENDING   = DWORD($00010000);
  {$EXTERNALSYM PDH_LOGSVC_STATUS_PENDING}

  PDH_LOGSVC_NAME_UNDEFINED   = DWORD(-1);
  {$EXTERNALSYM PDH_LOGSVC_NAME_UNDEFINED}
  PDH_LOGSVC_NAME_MMDDHH      = DWORD(0);
  {$EXTERNALSYM PDH_LOGSVC_NAME_MMDDHH}
  PDH_LOGSVC_NAME_NNNNNN      = DWORD(1);
  {$EXTERNALSYM PDH_LOGSVC_NAME_NNNNNN}
  PDH_LOGSVC_NAME_YYDDD       = DWORD(2);
  {$EXTERNALSYM PDH_LOGSVC_NAME_YYDDD}
  PDH_LOGSVC_NAME_YYMM        = DWORD(3);
  {$EXTERNALSYM PDH_LOGSVC_NAME_YYMM}
  PDH_LOGSVC_NAME_YYMMDD      = DWORD(4);
  {$EXTERNALSYM PDH_LOGSVC_NAME_YYMMDD}
  PDH_LOGSVC_NAME_YYMMDDHH    = DWORD(5);
  {$EXTERNALSYM PDH_LOGSVC_NAME_YYMMDDHH}

  PDH_LOGSVC_RENAME_UNDEFINED = DWORD(-1);
  {$EXTERNALSYM PDH_LOGSVC_RENAME_UNDEFINED}
  PDH_LOGSVC_RENAME_HOURS     = DWORD(0);
  {$EXTERNALSYM PDH_LOGSVC_RENAME_HOURS}
  PDH_LOGSVC_RENAME_DAYS      = DWORD(1);
  {$EXTERNALSYM PDH_LOGSVC_RENAME_DAYS}
  PDH_LOGSVC_RENAME_MONTHS    = DWORD(2);
  {$EXTERNALSYM PDH_LOGSVC_RENAME_MONTHS}
  PDH_LOGSVC_RENAME_KBYTES    = DWORD(3);
  {$EXTERNALSYM PDH_LOGSVC_RENAME_KBYTES}
  PDH_LOGSVC_RENAME_MBYTES    = DWORD(4);
  {$EXTERNALSYM PDH_LOGSVC_RENAME_MBYTES}

function PdhLogServiceCommandA(szMachineName, szQueryName: PAnsiChar;
  dwFlags: DWORD; pdwStatus: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhLogServiceCommandA}
function PdhLogServiceCommandW(szMachineName, szQueryName: PWideChar;
  dwFlags: DWORD; pdwStatus: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhLogServiceCommandW}
function PdhLogServiceCommand(szMachineName, szQueryName: PChar;
  dwFlags: DWORD; pdwStatus: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhLogServiceCommand}

function PdhLogServiceControlA(szMachineName, szQueryName: PAnsiChar; dwFlags: DWORD;
  pInfoBuffer: PPdhLogServiceQueryInfoA; pdwBufferSize: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhLogServiceControlA}
function PdhLogServiceControlW(szMachineName, szQueryName: PWideChar; dwFlags: DWORD;
  pInfoBuffer: PPdhLogServiceQueryInfoW; pdwBufferSize: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhLogServiceControlW}
function PdhLogServiceControl(szMachineName, szQueryName: PChar; dwFlags: DWORD;
  pInfoBuffer: PPdhLogServiceQueryInfo; pdwBufferSize: LPDWORD): Longint; stdcall;
{$EXTERNALSYM PdhLogServiceControl}

implementation

const
  PdhLib = 'pdh.dll';

function IsSuccessSeverity(ErrorCode: Longint): Boolean;
begin
  Result := (ErrorCode and $C0000000) = $00000000;
end;

function IsInformationalSeverity(ErrorCode: Longint): Boolean;
begin
  Result := (ErrorCode and $C0000000) = $40000000;
end;

function IsWarningSeverity(ErrorCode: Longint): Boolean;
begin
  Result := (ErrorCode and $C0000000) = $80000000;
end;

function IsErrorSeverity(ErrorCode: Longint): Boolean;
begin
  Result := (ErrorCode and $C0000000) = $C0000000;
end;

function PdhGetDllVersion; external PdhLib name 'PdhGetDllVersion';
function PdhOpenQueryA; external PdhLib name 'PdhOpenQuery';
function PdhOpenQueryW; external PdhLib name 'PdhOpenQuery';
function PdhOpenQuery; external PdhLib name 'PdhOpenQuery';
function PdhAddCounterA; external PdhLib name 'PdhAddCounterA';
function PdhAddCounterW; external PdhLib name 'PdhAddCounterW';
function PdhAddCounter; external PdhLib name 'PdhAddCounterA';
function PdhRemoveCounter; external PdhLib name 'PdhRemoveCounter';
function PdhCollectQueryData; external PdhLib name 'PdhCollectQueryData';
function PdhCloseQuery; external PdhLib name 'PdhCloseQuery';
function PdhGetFormattedCounterValue; external PdhLib name 'PdhGetFormattedCounterValue';
function PdhGetFormattedCounterArrayA; external PdhLib name 'PdhGetFormattedCounterArrayA';
function PdhGetFormattedCounterArrayW; external PdhLib name 'PdhGetFormattedCounterArrayW';
function PdhGetFormattedCounterArray; external PdhLib name 'PdhGetFormattedCounterArrayA';
function PdhGetRawCounterValue; external PdhLib name 'PdhGetRawCounterValue';
function PdhGetRawCounterArrayA; external PdhLib name 'PdhGetRawCounterArrayA';
function PdhGetRawCounterArrayW; external PdhLib name 'PdhGetRawCounterArrayW';
function PdhGetRawCounterArray; external PdhLib name 'PdhGetRawCounterArrayA';
function PdhCalculateCounterFromRawValue; external PdhLib name 'PdhCalculateCounterFromRawValue';
function PdhComputeCounterStatistics; external PdhLib name 'PdhComputeCounterStatistics';
function PdhGetCounterInfoA; external PdhLib name 'PdhGetCounterInfoA';
function PdhGetCounterInfoW; external PdhLib name 'PdhGetCounterInfoW';
function PdhGetCounterInfo; external PdhLib name 'PdhGetCounterInfoA';
function PdhSetCounterScaleFactor; external PdhLib name 'PdhSetCounterScaleFactor';
function PdhConnectMachineA; external PdhLib name 'PdhConnectMachineA';
function PdhConnectMachineW; external PdhLib name 'PdhConnectMachineW';
function PdhConnectMachine; external PdhLib name 'PdhConnectMachineA';
function PdhEnumMachinesA; external PdhLib name 'PdhEnumMachinesA';
function PdhEnumMachinesW; external PdhLib name 'PdhEnumMachinesW';
function PdhEnumMachines; external PdhLib name 'PdhEnumMachinesA';
function PdhEnumObjectsA; external PdhLib name 'PdhEnumObjectsA';
function PdhEnumObjectsW; external PdhLib name 'PdhEnumObjectsW';
function PdhEnumObjects; external PdhLib name 'PdhEnumObjectsA';
function PdhEnumObjectItemsA; external PdhLib name 'PdhEnumObjectItemsA';
function PdhEnumObjectItemsW; external PdhLib name 'PdhEnumObjectItemsW';
function PdhEnumObjectItems; external PdhLib name 'PdhEnumObjectItemsA';
function PdhMakeCounterPathA; external PdhLib name 'PdhMakeCounterPathA';
function PdhMakeCounterPathW; external PdhLib name 'PdhMakeCounterPathW';
function PdhMakeCounterPath; external PdhLib name 'PdhMakeCounterPathA';
function PdhParseCounterPathA; external PdhLib name 'PdhParseCounterPathA';
function PdhParseCounterPathW; external PdhLib name 'PdhParseCounterPathW';
function PdhParseCounterPath; external PdhLib name 'PdhParseCounterPathA';

function PDH_PATH_LANG_FLAGS(LangId, Flags: DWORD): DWORD;
begin
  Result := DWORD(((LangId and $0000FFFF) shl 16) or (Flags and $0000FFFF));
end;

function PdhParseInstanceNameA; external PdhLib name 'PdhParseInstanceNameA';
function PdhParseInstanceNameW; external PdhLib name 'PdhParseInstanceNameW';
function PdhParseInstanceName; external PdhLib name 'PdhParseInstanceNameA';
function PdhValidatePathA; external PdhLib name 'PdhValidatePathA';
function PdhValidatePathW; external PdhLib name 'PdhValidatePathW';
function PdhValidatePath; external PdhLib name 'PdhValidatePathA';
function PdhGetDefaultPerfObjectA; external PdhLib name 'PdhGetDefaultPerfObjectA';
function PdhGetDefaultPerfObjectW; external PdhLib name 'PdhGetDefaultPerfObjectW';
function PdhGetDefaultPerfObject; external PdhLib name 'PdhGetDefaultPerfObjectA';
function PdhGetDefaultPerfCounterA; external PdhLib name 'PdhGetDefaultPerfCounterA';
function PdhGetDefaultPerfCounterW; external PdhLib name 'PdhGetDefaultPerfCounterW';
function PdhGetDefaultPerfCounter; external PdhLib name 'PdhGetDefaultPerfCounterA';
function PdhBrowseCountersA; external PdhLib name 'PdhBrowseCountersA';
function PdhBrowseCountersW; external PdhLib name 'PdhBrowseCountersW';
function PdhBrowseCounters; external PdhLib name 'PdhBrowseCountersA';
function PdhExpandCounterPathA; external PdhLib name 'PdhExpandCounterPathA';
function PdhExpandCounterPathW; external PdhLib name 'PdhExpandCounterPathW';
function PdhExpandCounterPath; external PdhLib name 'PdhExpandCounterPathA';
function PdhLookupPerfNameByIndexA; external PdhLib name 'PdhLookupPerfNameByIndexA';
function PdhLookupPerfNameByIndexW; external PdhLib name 'PdhLookupPerfNameByIndexW';
function PdhLookupPerfNameByIndex; external PdhLib name 'PdhLookupPerfNameByIndexA';
function PdhLookupPerfIndexByNameA; external PdhLib name 'PdhLookupPerfIndexByNameA';
function PdhLookupPerfIndexByNameW; external PdhLib name 'PdhLookupPerfIndexByNameW';
function PdhLookupPerfIndexByName; external PdhLib name 'PdhLookupPerfIndexByNameA';
function PdhOpenLogA; external PdhLib name 'PdhOpenLogA';
function PdhOpenLogW; external PdhLib name 'PdhOpenLogW';
function PdhOpenLog; external PdhLib name 'PdhOpenLogA';
function PdhUpdateLogA; external PdhLib name 'PdhUpdateLogA';
function PdhUpdateLogW; external PdhLib name 'PdhUpdateLogW';
function PdhUpdateLog; external PdhLib name 'PdhUpdateLogA';
function PdhUpdateLogFileCatalog; external PdhLib name 'PdhUpdateLogFileCatalog';
function PdhGetLogFileSize; external PdhLib name 'PdhGetLogFileSize';
function PdhCloseLog; external PdhLib name 'PdhCloseLog';
function PdhSelectDataSourceA; external PdhLib name 'PdhSelectDataSourceA';
function PdhSelectDataSourceW; external PdhLib name 'PdhSelectDataSourceW';
function PdhSelectDataSource; external PdhLib name 'PdhSelectDataSourceA';
function PdhIsRealTimeQuery; external PdhLib name 'PdhIsRealTimeQuery';
function PdhSetQueryTimeRange; external PdhLib name 'PdhSetQueryTimeRange';
function PdhGetDataSourceTimeRangeA; external PdhLib name 'PdhGetDataSourceTimeRangeA';
function PdhGetDataSourceTimeRangeW; external PdhLib name 'PdhGetDataSourceTimeRangeW';
function PdhGetDataSourceTimeRange; external PdhLib name 'PdhGetDataSourceTimeRangeA';
function PdhCollectQueryDataEx; external PdhLib name 'PdhCollectQueryDataEx';
function PdhFormatFromRawValue; external PdhLib name 'PdhFormatFromRawValue';
function PdhGetCounterTimeBase; external PdhLib name 'PdhGetCounterTimeBase';
function PdhReadRawLogRecord; external PdhLib name 'PdhReadRawLogRecord';
function PdhSetDefaultRealTimeDataSource; external PdhLib name 'PdhSetDefaultRealTimeDataSource';
function PdhLogServiceCommandA; external PdhLib name 'PdhLogServiceCommandA';
function PdhLogServiceCommandW; external PdhLib name 'PdhLogServiceCommandW';
function PdhLogServiceCommand; external PdhLib name 'PdhLogServiceCommandA';
function PdhLogServiceControlA; external PdhLib name 'PdhLogServiceControlA';
function PdhLogServiceControlW; external PdhLib name 'PdhLogServiceControlW';
function PdhLogServiceControl; external PdhLib name 'PdhLogServiceControlA';

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -