jwaloadperf.pas 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. {******************************************************************************}
  2. { }
  3. { Performance Monitoring Installer API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: loadperf.h, released June 2000. The original Pascal }
  9. { code is: LoadPerf.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. unit JwaLoadPerf;
  43. {$WEAKPACKAGEUNIT}
  44. {$I jediapilib.inc}
  45. interface
  46. uses
  47. JwaWinType;
  48. // flags for dwFlags Argument
  49. const
  50. LOADPERF_FLAGS_DELETE_MOF_ON_EXIT = ULONG_PTR(1);
  51. {$EXTERNALSYM LOADPERF_FLAGS_DELETE_MOF_ON_EXIT}
  52. LOADPERF_FLAGS_LOAD_REGISTRY_ONLY = ULONG_PTR(2);
  53. {$EXTERNALSYM LOADPERF_FLAGS_LOAD_REGISTRY_ONLY}
  54. LOADPERF_FLAGS_CREATE_MOF_ONLY = ULONG_PTR(4);
  55. {$EXTERNALSYM LOADPERF_FLAGS_CREATE_MOF_ONLY}
  56. LOADPERF_FLAGS_DISPLAY_USER_MSGS = ULONG_PTR(8);
  57. {$EXTERNALSYM LOADPERF_FLAGS_DISPLAY_USER_MSGS}
  58. (* removed PSDK XP SP1
  59. // note: LOADPERF_FLAGS_LOAD_REGISTRY_ONLY is not a valid flag for
  60. // LoadMofFromInstalledServiceA/W as the service must already be installed
  61. function LoadMofFromInstalledServiceA(szServiceName, szMofFilename: LPCSTR;
  62. dwFlags: ULONG_PTR): DWORD; stdcall;
  63. {$EXTERNALSYM LoadMofFromInstalledServiceA}
  64. function LoadMofFromInstalledServiceW(szServiceName, szMofFilename: LPCWSTR;
  65. dwFlags: ULONG_PTR): DWORD; stdcall;
  66. {$EXTERNALSYM LoadMofFromInstalledServiceW}
  67. function LoadMofFromInstalledService(szServiceName, szMofFilename: LPCTSTR;
  68. dwFlags: ULONG_PTR): DWORD; stdcall;
  69. {$EXTERNALSYM LoadMofFromInstalledService}
  70. *)
  71. function InstallPerfDllA(szComputerName, lpIniFile: LPCSTR; dwFlags: ULONG_PTR): DWORD; stdcall;
  72. {$EXTERNALSYM InstallPerfDllA}
  73. function InstallPerfDllW(szComputerName, lpIniFile: LPCWSTR; dwFlags: ULONG_PTR): DWORD; stdcall;
  74. {$EXTERNALSYM InstallPerfDllW}
  75. function InstallPerfDll(szComputerName, lpIniFile: LPCTSTR; dwFlags: ULONG_PTR): DWORD; stdcall;
  76. {$EXTERNALSYM InstallPerfDll}
  77. function LoadPerfCounterTextStringsA(lpCommandLine: LPSTR; bQuietModeArg: BOOL): DWORD; stdcall;
  78. {$EXTERNALSYM LoadPerfCounterTextStringsA}
  79. function LoadPerfCounterTextStringsW(lpCommandLine: LPWSTR; bQuietModeArg: BOOL): DWORD; stdcall;
  80. {$EXTERNALSYM LoadPerfCounterTextStringsW}
  81. function LoadPerfCounterTextStrings(lpCommandLine: LPTSTR; bQuietModeArg: BOOL): DWORD; stdcall;
  82. {$EXTERNALSYM LoadPerfCounterTextStrings}
  83. function UnloadPerfCounterTextStringsA(lpCommandLine: LPSTR; bQuietModeArg: BOOL): DWORD; stdcall;
  84. {$EXTERNALSYM UnloadPerfCounterTextStringsA}
  85. function UnloadPerfCounterTextStringsW(lpCommandLine: LPWSTR; bQuietModeArg: BOOL): DWORD; stdcall;
  86. {$EXTERNALSYM UnloadPerfCounterTextStringsW}
  87. function UnloadPerfCounterTextStrings(lpCommandLine: LPTSTR; bQuietModeArg: BOOL): DWORD; stdcall;
  88. {$EXTERNALSYM UnloadPerfCounterTextStrings}
  89. function UpdatePerfNameFilesA(szNewCtrFilePath, szNewHlpFilePath: LPCSTR;
  90. szLanguageID: LPSTR; dwFlags: ULONG_PTR): DWORD; stdcall;
  91. {$EXTERNALSYM UpdatePerfNameFilesA}
  92. function UpdatePerfNameFilesW(szNewCtrFilePath, szNewHlpFilePath: LPCWSTR;
  93. szLanguageID: LPWSTR; dwFlags: ULONG_PTR): DWORD; stdcall;
  94. {$EXTERNALSYM UpdatePerfNameFilesW}
  95. function UpdatePerfNameFiles(szNewCtrFilePath, szNewHlpFilePath: LPCTSTR;
  96. szLanguageID: LPTSTR; dwFlags: ULONG_PTR): DWORD; stdcall;
  97. {$EXTERNALSYM UpdatePerfNameFiles}
  98. function SetServiceAsTrustedA(szReserved, szServiceName: LPCSTR): DWORD; stdcall;
  99. {$EXTERNALSYM SetServiceAsTrustedA}
  100. function SetServiceAsTrustedW(szReserved, szServiceName: LPCWSTR): DWORD; stdcall;
  101. {$EXTERNALSYM SetServiceAsTrustedW}
  102. function SetServiceAsTrusted(szReserved, szServiceName: LPCTSTR): DWORD; stdcall;
  103. {$EXTERNALSYM SetServiceAsTrusted}
  104. function BackupPerfRegistryToFileW(szFileName: LPCWSTR; szCommentString: LPCWSTR): DWORD; stdcall;
  105. {$EXTERNALSYM BackupPerfRegistryToFileW}
  106. function RestorePerfRegistryFromFileW(szFileName: LPCWSTR; szLangId: LPCWSTR): DWORD; stdcall;
  107. {$EXTERNALSYM RestorePerfRegistryFromFileW}
  108. implementation
  109. const
  110. loadperflib = 'loadperf.dll';
  111. {$IFDEF UNICODE}
  112. AWSuffix = 'W';
  113. {$ELSE}
  114. AWSuffix = 'A';
  115. {$ENDIF UNICODE}
  116. {$IFDEF DYNAMIC_LINK}
  117. var
  118. _InstallPerfDllA: Pointer;
  119. function InstallPerfDllA;
  120. begin
  121. GetProcedureAddress(_InstallPerfDllA, loadperflib, 'InstallPerfDllA');
  122. asm
  123. MOV ESP, EBP
  124. POP EBP
  125. JMP [_InstallPerfDllA]
  126. end;
  127. end;
  128. var
  129. _InstallPerfDllW: Pointer;
  130. function InstallPerfDllW;
  131. begin
  132. GetProcedureAddress(_InstallPerfDllW, loadperflib, 'InstallPerfDllW');
  133. asm
  134. MOV ESP, EBP
  135. POP EBP
  136. JMP [_InstallPerfDllW]
  137. end;
  138. end;
  139. var
  140. _InstallPerfDll: Pointer;
  141. function InstallPerfDll;
  142. begin
  143. GetProcedureAddress(_InstallPerfDll, loadperflib, 'InstallPerfDll' + AWSuffix);
  144. asm
  145. MOV ESP, EBP
  146. POP EBP
  147. JMP [_InstallPerfDll]
  148. end;
  149. end;
  150. var
  151. _LoadPerfCounterTextStringsA: Pointer;
  152. function LoadPerfCounterTextStringsA;
  153. begin
  154. GetProcedureAddress(_LoadPerfCounterTextStringsA, loadperflib, 'LoadPerfCounterTextStringsA');
  155. asm
  156. MOV ESP, EBP
  157. POP EBP
  158. JMP [_LoadPerfCounterTextStringsA]
  159. end;
  160. end;
  161. var
  162. _LoadPerfCounterTextStringsW: Pointer;
  163. function LoadPerfCounterTextStringsW;
  164. begin
  165. GetProcedureAddress(_LoadPerfCounterTextStringsW, loadperflib, 'LoadPerfCounterTextStringsW');
  166. asm
  167. MOV ESP, EBP
  168. POP EBP
  169. JMP [_LoadPerfCounterTextStringsW]
  170. end;
  171. end;
  172. var
  173. _LoadPerfCounterTextStrings: Pointer;
  174. function LoadPerfCounterTextStrings;
  175. begin
  176. GetProcedureAddress(_LoadPerfCounterTextStrings, loadperflib, 'LoadPerfCounterTextStrings' + AWSuffix);
  177. asm
  178. MOV ESP, EBP
  179. POP EBP
  180. JMP [_LoadPerfCounterTextStrings]
  181. end;
  182. end;
  183. var
  184. _UnloadPerfCounterTextStringsA: Pointer;
  185. function UnloadPerfCounterTextStringsA;
  186. begin
  187. GetProcedureAddress(_UnloadPerfCounterTextStringsA, loadperflib, 'UnloadPerfCounterTextStringsA');
  188. asm
  189. MOV ESP, EBP
  190. POP EBP
  191. JMP [_UnloadPerfCounterTextStringsA]
  192. end;
  193. end;
  194. var
  195. _UnloadPerfCounterTextStringsW: Pointer;
  196. function UnloadPerfCounterTextStringsW;
  197. begin
  198. GetProcedureAddress(_UnloadPerfCounterTextStringsW, loadperflib, 'UnloadPerfCounterTextStringsW');
  199. asm
  200. MOV ESP, EBP
  201. POP EBP
  202. JMP [_UnloadPerfCounterTextStringsW]
  203. end;
  204. end;
  205. var
  206. _UnloadPerfCounterTextStrings: Pointer;
  207. function UnloadPerfCounterTextStrings;
  208. begin
  209. GetProcedureAddress(_UnloadPerfCounterTextStrings, loadperflib, 'UnloadPerfCounterTextStrings' + AWSuffix);
  210. asm
  211. MOV ESP, EBP
  212. POP EBP
  213. JMP [_UnloadPerfCounterTextStrings]
  214. end;
  215. end;
  216. var
  217. _UpdatePerfNameFilesA: Pointer;
  218. function UpdatePerfNameFilesA;
  219. begin
  220. GetProcedureAddress(_UpdatePerfNameFilesA, loadperflib, 'UpdatePerfNameFilesA');
  221. asm
  222. MOV ESP, EBP
  223. POP EBP
  224. JMP [_UpdatePerfNameFilesA]
  225. end;
  226. end;
  227. var
  228. _UpdatePerfNameFilesW: Pointer;
  229. function UpdatePerfNameFilesW;
  230. begin
  231. GetProcedureAddress(_UpdatePerfNameFilesW, loadperflib, 'UpdatePerfNameFilesW');
  232. asm
  233. MOV ESP, EBP
  234. POP EBP
  235. JMP [_UpdatePerfNameFilesW]
  236. end;
  237. end;
  238. var
  239. _UpdatePerfNameFiles: Pointer;
  240. function UpdatePerfNameFiles;
  241. begin
  242. GetProcedureAddress(_UpdatePerfNameFiles, loadperflib, 'UpdatePerfNameFiles' + AWSuffix);
  243. asm
  244. MOV ESP, EBP
  245. POP EBP
  246. JMP [_UpdatePerfNameFiles]
  247. end;
  248. end;
  249. var
  250. _SetServiceAsTrustedA: Pointer;
  251. function SetServiceAsTrustedA;
  252. begin
  253. GetProcedureAddress(_SetServiceAsTrustedA, loadperflib, 'SetServiceAsTrustedA');
  254. asm
  255. MOV ESP, EBP
  256. POP EBP
  257. JMP [_SetServiceAsTrustedA]
  258. end;
  259. end;
  260. var
  261. _SetServiceAsTrustedW: Pointer;
  262. function SetServiceAsTrustedW;
  263. begin
  264. GetProcedureAddress(_SetServiceAsTrustedW, loadperflib, 'SetServiceAsTrustedW');
  265. asm
  266. MOV ESP, EBP
  267. POP EBP
  268. JMP [_SetServiceAsTrustedW]
  269. end;
  270. end;
  271. var
  272. _SetServiceAsTrusted: Pointer;
  273. function SetServiceAsTrusted;
  274. begin
  275. GetProcedureAddress(_SetServiceAsTrusted, loadperflib, 'SetServiceAsTrusted' + AWSuffix);
  276. asm
  277. MOV ESP, EBP
  278. POP EBP
  279. JMP [_SetServiceAsTrusted]
  280. end;
  281. end;
  282. var
  283. _BackupPerfRegistryToFileW: Pointer;
  284. function BackupPerfRegistryToFileW;
  285. begin
  286. GetProcedureAddress(_BackupPerfRegistryToFileW, loadperflib, 'BackupPerfRegistryToFileW');
  287. asm
  288. MOV ESP, EBP
  289. POP EBP
  290. JMP [_BackupPerfRegistryToFileW]
  291. end;
  292. end;
  293. var
  294. _RestorePerfRegistryFromFileW: Pointer;
  295. function RestorePerfRegistryFromFileW;
  296. begin
  297. GetProcedureAddress(_RestorePerfRegistryFromFileW, loadperflib, 'RestorePerfRegistryFromFileW');
  298. asm
  299. MOV ESP, EBP
  300. POP EBP
  301. JMP [_RestorePerfRegistryFromFileW]
  302. end;
  303. end;
  304. {$ELSE}
  305. function InstallPerfDllA; external loadperflib name 'InstallPerfDllA';
  306. function InstallPerfDllW; external loadperflib name 'InstallPerfDllW';
  307. function InstallPerfDll; external loadperflib name 'InstallPerfDll' + AWSuffix;
  308. function LoadPerfCounterTextStringsA; external loadperflib name 'LoadPerfCounterTextStringsA';
  309. function LoadPerfCounterTextStringsW; external loadperflib name 'LoadPerfCounterTextStringsW';
  310. function LoadPerfCounterTextStrings; external loadperflib name 'LoadPerfCounterTextStrings' + AWSuffix;
  311. function UnloadPerfCounterTextStringsA; external loadperflib name 'UnloadPerfCounterTextStringsA';
  312. function UnloadPerfCounterTextStringsW; external loadperflib name 'UnloadPerfCounterTextStringsW';
  313. function UnloadPerfCounterTextStrings; external loadperflib name 'UnloadPerfCounterTextStrings' + AWSuffix;
  314. function UpdatePerfNameFilesA; external loadperflib name 'UpdatePerfNameFilesA';
  315. function UpdatePerfNameFilesW; external loadperflib name 'UpdatePerfNameFilesW';
  316. function UpdatePerfNameFiles; external loadperflib name 'UpdatePerfNameFiles' + AWSuffix;
  317. function SetServiceAsTrustedA; external loadperflib name 'SetServiceAsTrustedA';
  318. function SetServiceAsTrustedW; external loadperflib name 'SetServiceAsTrustedW';
  319. function SetServiceAsTrusted; external loadperflib name 'SetServiceAsTrusted' + AWSuffix;
  320. function BackupPerfRegistryToFileW; external loadperflib name 'BackupPerfRegistryToFileW';
  321. function RestorePerfRegistryFromFileW; external loadperflib name 'RestorePerfRegistryFromFileW';
  322. {$ENDIF DYNAMIC_LINK}
  323. end.