home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / resapi.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  22KB  |  979 lines

  1. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  2. /*++
  3.  
  4. Copyright (c) 1995-1999  Microsoft Corporation
  5.  
  6. Module Name:
  7.  
  8.     resapi.h
  9.  
  10. Abstract:
  11.  
  12.     This module defines the interface exported by Windows Clusters resources.
  13.  
  14. Revision History:
  15.  
  16. --*/
  17.  
  18. #ifndef _RESAPI_DEFINES_
  19. #define _RESAPI_DEFINES_
  20.  
  21. #if _MSC_VER > 1000
  22. #pragma once
  23. #endif
  24.  
  25. #include <windows.h>
  26. #include <winsvc.h>
  27. #include <clusapi.h>
  28. #include <stdio.h>
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. #define IN
  35. #define OUT
  36.  
  37. //
  38. // Definitions for entrypoints exported by a resource DLL.
  39. //
  40. #define STARTUP_ROUTINE "Startup"
  41.  
  42. #define CLRES_V1_FUNCTION_SIZE   sizeof(CLRES_V1_FUNCTIONS)
  43. #define CLRES_VERSION_V1_00    0x100
  44.  
  45. #define CLRES_V1_FUNCTION_TABLE( _Name,                     \
  46.                                  _Version,                  \
  47.                                  _Prefix,                   \
  48.                                  _Arbitrate,                \
  49.                                  _Release,                  \
  50.                                  _ResControl,               \
  51.                                  _ResTypeControl            \
  52.                                  )                          \
  53. CLRES_FUNCTION_TABLE _Name = { CLRES_V1_FUNCTION_SIZE,      \
  54.                                _Version,                    \
  55.                                _Prefix##Open,               \
  56.                                _Prefix##Close,              \
  57.                                _Prefix##Online,             \
  58.                                _Prefix##Offline,            \
  59.                                _Prefix##Terminate,          \
  60.                                _Prefix##LooksAlive,         \
  61.                                _Prefix##IsAlive,            \
  62.                                _Arbitrate,                  \
  63.                                _Release,                    \
  64.                                _ResControl,                 \
  65.                                _ResTypeControl }
  66.  
  67. #endif // ifndef _RESAPI_DEFINES_
  68.  
  69. #ifndef _RESAPI_
  70. #define _RESAPI_
  71.  
  72. //
  73. // Define a RESID
  74. //
  75.  
  76. typedef PVOID RESID;
  77.  
  78. //
  79. // Define a RESOURCE_HANDLE
  80. //
  81.  
  82. typedef HANDLE   RESOURCE_HANDLE;
  83.  
  84. //
  85. // Define the Resource Status structure.
  86. //
  87.  
  88. typedef struct RESOURCE_STATUS {
  89.     CLUSTER_RESOURCE_STATE  ResourceState;
  90.     DWORD           CheckPoint;
  91.     DWORD           WaitHint;
  92.     HANDLE          EventHandle;
  93. } RESOURCE_STATUS, *PRESOURCE_STATUS;
  94.  
  95.  
  96. #define ResUtilInitializeResourceStatus( _resource_status_ ) \
  97.     ZeroMemory( _resource_status_, sizeof(RESOURCE_STATUS) )
  98.  
  99. //
  100. // Define Resource DLL callback method for updating the state of a resource.
  101. //
  102.  
  103. typedef
  104. DWORD
  105. (_stdcall *PSET_RESOURCE_STATUS_ROUTINE) (
  106.     IN RESOURCE_HANDLE ResourceHandle,
  107.     IN PRESOURCE_STATUS ResourceStatus
  108.     );
  109.  
  110. //
  111. // Define Resource DLL callback method for notifying that a quorum
  112. // resource DLL failed to hold the quorum resource.
  113. //
  114. typedef
  115. VOID
  116. (_stdcall *PQUORUM_RESOURCE_LOST) (
  117.     IN RESOURCE_HANDLE Resource
  118.     );
  119.  
  120. //
  121. // Define Resource DLL callback method for logging events.
  122. //
  123. typedef enum LOG_LEVEL {
  124.     LOG_INFORMATION,
  125.     LOG_WARNING,
  126.     LOG_ERROR,
  127.     LOG_SEVERE
  128. } LOG_LEVEL, *PLOG_LEVEL;
  129.  
  130. typedef
  131. VOID
  132. (_stdcall *PLOG_EVENT_ROUTINE) (
  133.     IN RESOURCE_HANDLE ResourceHandle,
  134.     IN LOG_LEVEL LogLevel,
  135.     IN LPCWSTR FormatString,
  136.     ...
  137.     );
  138.  
  139. typedef
  140. RESID
  141. (_stdcall *POPEN_ROUTINE) (
  142.     IN LPCWSTR ResourceName,
  143.     IN HKEY ResourceKey,
  144.     IN RESOURCE_HANDLE ResourceHandle
  145.     );
  146.  
  147. typedef
  148. VOID
  149. (_stdcall *PCLOSE_ROUTINE) (
  150.     IN RESID Resource
  151.     );
  152.  
  153. typedef
  154. DWORD
  155. (_stdcall *PONLINE_ROUTINE) (
  156.     IN RESID Resource,
  157.     IN OUT LPHANDLE EventHandle
  158.     );
  159.  
  160. typedef
  161. DWORD
  162. (_stdcall *POFFLINE_ROUTINE) (
  163.     IN RESID Resource
  164.     );
  165.  
  166. typedef
  167. VOID
  168. (_stdcall *PTERMINATE_ROUTINE) (
  169.     IN RESID Resource
  170.     );
  171.  
  172. typedef
  173. BOOL
  174. (_stdcall *PIS_ALIVE_ROUTINE) (
  175.     IN RESID Resource
  176.     );
  177.  
  178. typedef
  179. BOOL
  180. (_stdcall *PLOOKS_ALIVE_ROUTINE) (
  181.     IN RESID Resource
  182.     );
  183.  
  184. typedef
  185. DWORD
  186. (_stdcall *PARBITRATE_ROUTINE) (
  187.     IN RESID Resource,
  188.     IN PQUORUM_RESOURCE_LOST LostQuorumResource
  189.     );
  190.  
  191. typedef
  192. DWORD
  193. (_stdcall *PRELEASE_ROUTINE) (
  194.     IN RESID Resource
  195.     );
  196.  
  197. typedef
  198. DWORD
  199. (_stdcall *PRESOURCE_CONTROL_ROUTINE) (
  200.     IN RESID Resource,
  201.     IN DWORD ControlCode,
  202.     IN PVOID InBuffer,
  203.     IN DWORD InBufferSize,
  204.     OUT PVOID OutBuffer,
  205.     IN DWORD OutBufferSize,
  206.     OUT LPDWORD BytesReturned
  207.     );
  208.  
  209. typedef
  210. DWORD
  211. (_stdcall *PRESOURCE_TYPE_CONTROL_ROUTINE) (
  212.     IN LPCWSTR ResourceTypeName,
  213.     IN DWORD ControlCode,
  214.     IN PVOID InBuffer,
  215.     IN DWORD InBufferSize,
  216.     OUT PVOID OutBuffer,
  217.     IN DWORD OutBufferSize,
  218.     OUT LPDWORD BytesReturned
  219.     );
  220.  
  221. typedef enum _RESOURCE_EXIT_STATE {
  222.     ResourceExitStateContinue,
  223.     ResourceExitStateTerminate,
  224.     ResourceExitStateMax
  225. } RESOURCE_EXIT_STATE;
  226.  
  227.  
  228. //***************************************************************
  229. //
  230. // Define the Function Table Format
  231. //
  232. //***************************************************************
  233.  
  234. //
  235. // Version 1 Resource DLL Interface definition
  236. //
  237. typedef struct CLRES_V1_FUNCTIONS {
  238.     POPEN_ROUTINE Open;
  239.     PCLOSE_ROUTINE Close;
  240.     PONLINE_ROUTINE Online;
  241.     POFFLINE_ROUTINE Offline;
  242.     PTERMINATE_ROUTINE Terminate;
  243.     PLOOKS_ALIVE_ROUTINE LooksAlive;
  244.     PIS_ALIVE_ROUTINE IsAlive;
  245.     PARBITRATE_ROUTINE Arbitrate;
  246.     PRELEASE_ROUTINE Release;
  247.     PRESOURCE_CONTROL_ROUTINE ResourceControl;
  248.     PRESOURCE_TYPE_CONTROL_ROUTINE ResourceTypeControl;
  249. } CLRES_V1_FUNCTIONS, *PCLRES_V1_FUNCTIONS;
  250.  
  251. //
  252. // Resource DLL Function Table definition
  253. //
  254. #if _MSC_VER >= 1200
  255. #pragma warning(push)
  256. #endif
  257. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  258. typedef struct CLRES_FUNCTION_TABLE {
  259.     DWORD   TableSize;
  260.     DWORD   Version;
  261.     union {
  262.         CLRES_V1_FUNCTIONS V1Functions;
  263.     };
  264. } CLRES_FUNCTION_TABLE, *PCLRES_FUNCTION_TABLE;
  265. #if _MSC_VER >= 1200
  266. #pragma warning(pop)
  267. #else
  268. #pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
  269. #endif
  270.  
  271. //
  272. // Define the Resource DLL Startup routine. This is the only routine
  273. // that should be exported from a resource DLL.
  274. //
  275.  
  276. //
  277. // Calculate the byte offset of a field in a structure of type type.
  278. //
  279.  
  280. #ifndef FIELD_OFFSET
  281. #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
  282. #endif
  283.  
  284. //
  285. // Property list structures and functions
  286. //
  287. typedef struct RESUTIL_PROPERTY_ITEM {
  288.     LPWSTR  Name;               // Property name
  289.     LPWSTR  KeyName;            // Name of value in cluster database
  290.     DWORD   Format;             // Format: REG_SZ, REG_DWORD, etc.
  291.     union {
  292.         DWORD_PTR  DefaultPtr;
  293.         DWORD      Default;     // Default value
  294.         LPVOID     lpDefault;
  295.     };
  296.     DWORD   Minimum;            // Minimum value
  297.     DWORD   Maximum;            // Maximum value
  298.     DWORD   Flags;              // Flags for this item
  299. #define RESUTIL_PROPITEM_READ_ONLY  0x00000001  // Property is read-only
  300. #define RESUTIL_PROPITEM_REQUIRED   0x00000002  // Property is required
  301. #define RESUTIL_PROPITEM_SIGNED     0x00000004  // Numeric property is signed (defaults to unsigned)
  302.  
  303.     DWORD   Offset;             // Byte offset to value in parameter block
  304.                                 //   Assumes MULTI_SZ and BINARY parameters
  305.                                 //   are LPWSTRs followed by DWORDs for length
  306. } RESUTIL_PROPERTY_ITEM, *PRESUTIL_PROPERTY_ITEM;
  307.  
  308.  
  309. typedef
  310. DWORD
  311. (_stdcall *PSTARTUP_ROUTINE) (
  312.     IN LPCWSTR ResourceType,
  313.     IN DWORD MinVersionSupported,
  314.     IN DWORD MaxVersionSupported,
  315.     IN PSET_RESOURCE_STATUS_ROUTINE SetResourceStatus,
  316.     IN PLOG_EVENT_ROUTINE LogEvent,
  317.     OUT PCLRES_FUNCTION_TABLE *FunctionTable
  318.     );
  319.  
  320. //
  321. // Define layout of shared memory used for tracking Resource Monitor state.
  322. //
  323. typedef enum RESOURCE_MONITOR_STATE {
  324.     RmonInitializing,
  325.     RmonIdle,
  326.     RmonStartingResource,
  327.     RmonInitializingResource,
  328.     RmonOnlineResource,
  329.     RmonOfflineResource,
  330.     RmonShutdownResource,
  331.     RmonDeletingResource,
  332.     RmonIsAlivePoll,
  333.     RmonLooksAlivePoll,
  334.     RmonArbitrateResource,
  335.     RmonReleaseResource,
  336.     RmonResourceControl,
  337.     RmonResourceTypeControl
  338. } RESOURCE_MONITOR_STATE;
  339.  
  340. typedef struct MONITOR_STATE {
  341.     LARGE_INTEGER LastUpdate;
  342.     RESOURCE_MONITOR_STATE State;
  343.     HANDLE ActiveResource;
  344.     BOOL   ResmonStop;
  345. } MONITOR_STATE, *PMONITOR_STATE;
  346.  
  347.  
  348. //
  349. // Resource Utility Routines
  350. //
  351.  
  352. DWORD
  353. WINAPI
  354. ResUtilStartResourceService(
  355.     IN LPCWSTR pszServiceName,
  356.     OUT LPSC_HANDLE phServiceHandle
  357.     );
  358.  
  359. DWORD
  360. WINAPI
  361. ResUtilVerifyResourceService(
  362.     IN LPCWSTR pszServiceName
  363.     );
  364.  
  365. DWORD
  366. WINAPI
  367. ResUtilStopResourceService(
  368.     IN LPCWSTR pszServiceName
  369.     );
  370.  
  371. DWORD
  372. WINAPI
  373. ResUtilVerifyService(
  374.     IN SC_HANDLE hServiceHandle
  375.     );
  376.  
  377. DWORD
  378. WINAPI
  379. ResUtilStopService(
  380.     IN SC_HANDLE hServiceHandle
  381.     );
  382.  
  383. DWORD
  384. WINAPI
  385. ResUtilCreateDirectoryTree(
  386.     IN LPCWSTR pszPath
  387.     );
  388.  
  389. BOOL
  390. WINAPI
  391. ResUtilIsPathValid(
  392.     IN LPCWSTR pszPath
  393.     );
  394.  
  395. DWORD
  396. WINAPI
  397. ResUtilEnumProperties(
  398.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  399.     OUT LPWSTR pszOutProperties,
  400.     IN DWORD cbOutPropertiesSize,
  401.     OUT LPDWORD pcbBytesReturned,
  402.     OUT LPDWORD pcbRequired
  403.     );
  404.  
  405. DWORD
  406. WINAPI
  407. ResUtilEnumPrivateProperties(
  408.     IN HKEY hkeyClusterKey,
  409.     OUT LPWSTR pszOutProperties,
  410.     IN DWORD cbOutPropertiesSize,
  411.     OUT LPDWORD pcbBytesReturned,
  412.     OUT LPDWORD pcbRequired
  413.     );
  414.  
  415. DWORD
  416. WINAPI
  417. ResUtilGetProperties(
  418.     IN HKEY hkeyClusterKey,
  419.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  420.     OUT PVOID pOutPropertyList,
  421.     IN DWORD cbOutPropertyListSize,
  422.     OUT LPDWORD pcbBytesReturned,
  423.     OUT LPDWORD pcbRequired
  424.     );
  425.  
  426. DWORD
  427. WINAPI
  428. ResUtilGetAllProperties(
  429.     IN HKEY hkeyClusterKey,
  430.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  431.     OUT PVOID pOutPropertyList,
  432.     IN DWORD cbOutPropertyListSize,
  433.     OUT LPDWORD pcbBytesReturned,
  434.     OUT LPDWORD pcbRequired
  435.     );
  436.  
  437. DWORD
  438. WINAPI
  439. ResUtilGetPrivateProperties(
  440.     IN HKEY hkeyClusterKey,
  441.     OUT PVOID pOutPropertyList,
  442.     IN DWORD cbOutPropertyListSize,
  443.     OUT LPDWORD pcbBytesReturned,
  444.     OUT LPDWORD pcbRequired
  445.     );
  446.  
  447. DWORD
  448. WINAPI
  449. ResUtilGetPropertySize(
  450.     IN HKEY hkeyClusterKey,
  451.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,
  452.     IN OUT LPDWORD pcbOutPropertyListSize,
  453.     IN OUT LPDWORD pnPropertyCount
  454.     );
  455.  
  456. DWORD
  457. WINAPI
  458. ResUtilGetProperty(
  459.     IN HKEY hkeyClusterKey,
  460.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTableItem,
  461.     OUT PVOID * pOutPropertyItem,
  462.     IN OUT LPDWORD pcbOutPropertyItemSize
  463.     );
  464.  
  465. DWORD
  466. WINAPI
  467. ResUtilVerifyPropertyTable(
  468.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  469.     IN PVOID Reserved,
  470.     IN BOOL bAllowUnknownProperties,
  471.     IN const PVOID pInPropertyList,
  472.     IN DWORD cbInPropertyListSize,
  473.     OUT OPTIONAL LPBYTE pOutParams
  474.     );
  475.  
  476. DWORD
  477. WINAPI
  478. ResUtilSetPropertyTable(
  479.     IN HKEY hkeyClusterKey,
  480.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  481.     IN PVOID Reserved,
  482.     IN BOOL bAllowUnknownProperties,
  483.     IN const PVOID pInPropertyList,
  484.     IN DWORD cbInPropertyListSize,
  485.     OUT OPTIONAL LPBYTE pOutParams
  486.     );
  487.  
  488. DWORD
  489. WINAPI
  490. ResUtilSetPropertyTableEx(
  491.     IN HKEY hkeyClusterKey,
  492.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  493.     IN PVOID Reserved,
  494.     IN BOOL bAllowUnknownProperties,
  495.     IN const PVOID pInPropertyList,
  496.     IN DWORD cbInPropertyListSize,
  497.     IN BOOL bForceWrite,
  498.     OUT OPTIONAL LPBYTE pOutParams
  499.     );
  500.  
  501. DWORD
  502. WINAPI
  503. ResUtilSetPropertyParameterBlock(
  504.     IN HKEY hkeyClusterKey,
  505.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  506.     IN PVOID Reserved,
  507.     IN const LPBYTE pInParams,
  508.     IN const PVOID pInPropertyList,
  509.     IN DWORD cbInPropertyListSize,
  510.     OUT OPTIONAL LPBYTE pOutParams
  511.     );
  512.  
  513. DWORD
  514. WINAPI
  515. ResUtilSetPropertyParameterBlockEx(
  516.     IN HKEY hkeyClusterKey,
  517.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  518.     IN PVOID Reserved,
  519.     IN const LPBYTE pInParams,
  520.     IN const PVOID pInPropertyList,
  521.     IN DWORD cbInPropertyListSize,
  522.     IN BOOL bForceWrite,
  523.     OUT OPTIONAL LPBYTE pOutParams
  524.     );
  525.  
  526. DWORD
  527. WINAPI
  528. ResUtilSetUnknownProperties(
  529.     IN HKEY hkeyClusterKey,
  530.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  531.     IN const PVOID pInPropertyList,
  532.     IN DWORD cbInPropertyListSize
  533.     );
  534.  
  535. DWORD
  536. WINAPI
  537. ResUtilGetPropertiesToParameterBlock(
  538.     IN HKEY hkeyClusterKey,
  539.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  540.     OUT LPBYTE pOutParams,
  541.     IN BOOL bCheckForRequiredProperties,
  542.     OUT OPTIONAL LPWSTR * pszNameOfPropInError
  543.     );
  544.  
  545. DWORD
  546. WINAPI
  547. ResUtilPropertyListFromParameterBlock(
  548.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  549.     OUT PVOID  pOutPropertyList,
  550.     IN OUT LPDWORD pcbOutPropertyListSize,
  551.     IN const LPBYTE pInParams,
  552.     OUT LPDWORD pcbBytesReturned,
  553.     OUT LPDWORD pcbRequired
  554.     );
  555.  
  556. DWORD
  557. WINAPI
  558. ResUtilDupParameterBlock(
  559.     OUT LPBYTE pOutParams,
  560.     IN const LPBYTE pInParams,
  561.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable
  562.     );
  563.  
  564. void
  565. WINAPI
  566. ResUtilFreeParameterBlock(
  567.     IN OUT LPBYTE pOutParams,
  568.     IN const LPBYTE pInParams,
  569.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable
  570.     );
  571.  
  572. DWORD
  573. WINAPI
  574. ResUtilAddUnknownProperties(
  575.     IN HKEY hkeyClusterKey,
  576.     IN const PRESUTIL_PROPERTY_ITEM pPropertyTable,
  577.     IN OUT PVOID pOutPropertyList,
  578.     IN DWORD pcbOutPropertyListSize,
  579.     IN OUT LPDWORD pcbBytesReturned,
  580.     IN OUT LPDWORD pcbRequired
  581.     );
  582.  
  583. DWORD
  584. WINAPI
  585. ResUtilSetPrivatePropertyList(
  586.     IN HKEY hkeyClusterKey,
  587.     IN const PVOID pInPropertyList,
  588.     IN DWORD cbInPropertyListSize
  589.     );
  590.  
  591. DWORD
  592. WINAPI
  593. ResUtilVerifyPrivatePropertyList(
  594.     IN const PVOID pInPropertyList,
  595.     IN DWORD cbInPropertyListSize
  596.     );
  597.  
  598. PWSTR
  599. WINAPI
  600. ResUtilDupString(
  601.     IN LPCWSTR pszInString
  602.     );
  603.  
  604. DWORD
  605. WINAPI
  606. ResUtilGetBinaryValue(
  607.     IN HKEY hkeyClusterKey,
  608.     IN LPCWSTR pszValueName,
  609.     OUT LPBYTE * ppbOutValue,
  610.     OUT DWORD * pcbOutValueSize
  611.     );
  612.  
  613. LPWSTR
  614. WINAPI
  615. ResUtilGetSzValue(
  616.     IN HKEY hkeyClusterKey,
  617.     IN LPCWSTR pszValueName
  618.     );
  619.  
  620. LPWSTR
  621. WINAPI
  622. ResUtilGetExpandSzValue(
  623.     IN HKEY hkeyClusterKey,
  624.     IN LPCWSTR pszValueName,
  625.     IN BOOL bExpand
  626.     );
  627.  
  628. __inline
  629. DWORD
  630. WINAPI
  631. ResUtilGetMultiSzValue(
  632.     IN HKEY hkeyClusterKey,
  633.     IN LPCWSTR pszValueName,
  634.     OUT LPWSTR * ppszOutValue,
  635.     OUT LPDWORD pcbOutValueSize
  636.     )
  637. {
  638.     return ResUtilGetBinaryValue( hkeyClusterKey, pszValueName, (LPBYTE *) ppszOutValue, pcbOutValueSize );
  639. }
  640.  
  641. DWORD
  642. WINAPI
  643. ResUtilGetDwordValue(
  644.     IN HKEY hkeyClusterKey,
  645.     IN LPCWSTR pszValueName,
  646.     OUT LPDWORD pdwOutValue,
  647.     IN DWORD dwDefaultValue OPTIONAL
  648.     );
  649.  
  650. DWORD
  651. WINAPI
  652. ResUtilSetBinaryValue(
  653.     IN HKEY hkeyClusterKey,
  654.     IN LPCWSTR pszValueName,
  655.     IN const LPBYTE pbNewValue,
  656.     IN DWORD cbNewValueSize,
  657.     IN OUT LPBYTE * ppbOutValue,
  658.     IN OUT LPDWORD pcbOutValueSize
  659.     );
  660.  
  661. DWORD
  662. WINAPI
  663. ResUtilSetSzValue(
  664.     IN HKEY hkeyClusterKey,
  665.     IN LPCWSTR pszValueName,
  666.     IN LPCWSTR pszNewValue,
  667.     IN OUT LPWSTR * ppszOutString
  668.     );
  669.  
  670. DWORD
  671. WINAPI
  672. ResUtilSetExpandSzValue(
  673.     IN HKEY hkeyClusterKey,
  674.     IN LPCWSTR pszValueName,
  675.     IN LPCWSTR pszNewValue,
  676.     IN OUT LPWSTR * ppszOutString
  677.     );
  678.  
  679. DWORD
  680. WINAPI
  681. ResUtilSetMultiSzValue(
  682.     IN HKEY hkeyClusterKey,
  683.     IN LPCWSTR pszValueName,
  684.     IN LPCWSTR pszNewValue,
  685.     IN DWORD cbNewValueSize,
  686.     IN OUT LPWSTR * ppszOutValue,
  687.     IN OUT LPDWORD pcbOutValueSize
  688.     );
  689.  
  690. DWORD
  691. WINAPI
  692. ResUtilSetDwordValue(
  693.     IN HKEY hkeyClusterKey,
  694.     IN LPCWSTR pszValueName,
  695.     IN DWORD dwNewValue,
  696.     IN OUT LPDWORD pdwOutValue
  697.     );
  698.  
  699. DWORD
  700. WINAPI
  701. ResUtilGetBinaryProperty(
  702.     OUT LPBYTE * ppbOutValue,
  703.     OUT LPDWORD pcbOutValueSize,
  704.     IN const PCLUSPROP_BINARY pValueStruct,
  705.     IN const LPBYTE pbOldValue,
  706.     IN DWORD cbOldValueSize,
  707.     OUT LPBYTE * ppPropertyList,
  708.     OUT LPDWORD pcbPropertyListSize
  709.     );
  710.  
  711. DWORD
  712. WINAPI
  713. ResUtilGetSzProperty(
  714.     OUT LPWSTR * ppszOutValue,
  715.     IN const PCLUSPROP_SZ pValueStruct,
  716.     IN LPCWSTR pszOldValue,
  717.     OUT LPBYTE * ppPropertyList,
  718.     OUT LPDWORD pcbPropertyListSize
  719.     );
  720.  
  721. DWORD
  722. WINAPI
  723. ResUtilGetMultiSzProperty(
  724.     OUT LPWSTR * ppszOutValue,
  725.     OUT LPDWORD pcbOutValueSize,
  726.     IN const PCLUSPROP_SZ pValueStruct,
  727.     IN LPCWSTR pszOldValue,
  728.     IN DWORD cbOldValueSize,
  729.     OUT LPBYTE * ppPropertyList,
  730.     OUT LPDWORD pcbPropertyListSize
  731.     );
  732.  
  733. DWORD
  734. WINAPI
  735. ResUtilGetDwordProperty(
  736.     OUT LPDWORD pdwOutValue,
  737.     IN const PCLUSPROP_DWORD pValueStruct,
  738.     IN DWORD dwOldValue,
  739.     IN DWORD dwMinimum,
  740.     IN DWORD dwMaximum,
  741.     OUT LPBYTE * ppPropertyList,
  742.     OUT LPDWORD pcbPropertyListSize
  743.     );
  744.  
  745. LPVOID
  746. WINAPI
  747. ResUtilGetEnvironmentWithNetName(
  748.     IN HRESOURCE hResource
  749.     );
  750.  
  751. DWORD
  752. WINAPI
  753. ResUtilFreeEnvironment(
  754.     IN LPVOID lpEnvironment
  755.     );
  756.  
  757. LPWSTR
  758. WINAPI
  759. ResUtilExpandEnvironmentStrings(
  760.     IN LPCWSTR pszSrc
  761.     );
  762.  
  763. DWORD
  764. WINAPI
  765. ResUtilSetResourceServiceEnvironment(
  766.     IN LPCWSTR pszServiceName,
  767.     IN HRESOURCE hResource,
  768.     IN PLOG_EVENT_ROUTINE pfnLogEvent,
  769.     IN RESOURCE_HANDLE hResourceHandle
  770.     );
  771.  
  772. DWORD
  773. WINAPI
  774. ResUtilSetResourceServiceStartParameters(
  775.     IN LPCWSTR pszServiceName,
  776.     IN SC_HANDLE schSCMHandle,
  777.     IN OUT LPSC_HANDLE phService,
  778.     IN PLOG_EVENT_ROUTINE pfnLogEvent,
  779.     IN RESOURCE_HANDLE hResourceHandle
  780.     );
  781.  
  782. DWORD
  783. WINAPI
  784. ResUtilFindSzProperty(
  785.     IN const PVOID pPropertyList,
  786.     IN DWORD cbPropertyListSize,
  787.     IN LPCWSTR pszPropertyName,
  788.     OUT LPWSTR * pszPropertyValue
  789.     );
  790.  
  791. DWORD
  792. WINAPI
  793. ResUtilFindExpandSzProperty(
  794.     IN const PVOID pPropertyList,
  795.     IN DWORD cbPropertyListSize,
  796.     IN LPCWSTR pszPropertyName,
  797.     OUT LPWSTR * pszPropertyValue
  798.     );
  799.  
  800. DWORD
  801. WINAPI
  802. ResUtilFindExpandedSzProperty(
  803.     IN const PVOID pPropertyList,
  804.     IN DWORD cbPropertyListSize,
  805.     IN LPCWSTR pszPropertyName,
  806.     OUT LPWSTR * pszPropertyValue
  807.     );
  808.  
  809. DWORD
  810. WINAPI
  811. ResUtilFindDwordProperty(
  812.     IN const PVOID pPropertyList,
  813.     IN DWORD cbPropertyListSize,
  814.     IN LPCWSTR pszPropertyName,
  815.     OUT LPDWORD pdwPropertyValue
  816.     );
  817.  
  818. DWORD
  819. WINAPI
  820. ResUtilFindBinaryProperty(
  821.     IN const PVOID pPropertyList,
  822.     IN DWORD cbPropertyListSize,
  823.     IN LPCWSTR pszPropertyName,
  824.     OUT LPBYTE * pbPropertyValue,
  825.     OUT LPDWORD pcbPropertyValueSize
  826.     );
  827.  
  828. DWORD
  829. WINAPI
  830. ResUtilFindMultiSzProperty(
  831.     IN const PVOID pPropertyList,
  832.     IN DWORD cbPropertyListSize,
  833.     IN LPCWSTR pszPropertyName,
  834.     OUT LPWSTR * pszPropertyValue,
  835.     OUT LPDWORD pcbPropertyValueSize
  836.     );
  837.  
  838. DWORD
  839. WINAPI
  840. ResUtilFindLongProperty(
  841.     IN const PVOID pPropertyList,
  842.     IN DWORD cbPropertyListSize,
  843.     IN LPCWSTR pszPropertyName,
  844.     OUT LPLONG plPropertyValueSize
  845.     );
  846.  
  847.  
  848. //
  849. // Common worker thread routines that allow a pending operation to
  850. // be cancelled with CORRECT synchronization.
  851. //
  852. typedef struct CLUS_WORKER {
  853.     HANDLE hThread;
  854.     BOOL Terminate;
  855. } CLUS_WORKER, *PCLUS_WORKER;
  856.  
  857. typedef DWORD (WINAPI *PWORKER_START_ROUTINE)(
  858.     PCLUS_WORKER pWorker,
  859.     LPVOID lpThreadParameter
  860.     );
  861.  
  862. DWORD
  863. WINAPI
  864. ClusWorkerCreate(
  865.     OUT PCLUS_WORKER lpWorker,
  866.     IN PWORKER_START_ROUTINE lpStartAddress,
  867.     IN PVOID lpParameter
  868.     );
  869.  
  870. BOOL
  871. WINAPI
  872. ClusWorkerCheckTerminate(
  873.     IN PCLUS_WORKER lpWorker
  874.     );
  875.  
  876. VOID
  877. WINAPI
  878. ClusWorkerTerminate(
  879.     IN PCLUS_WORKER lpWorker
  880.     );
  881.  
  882.  
  883. //Define enumerate resource callback function. This gets called for each resource enumerated
  884. //by ResUtilEnumResources
  885. typedef   DWORD (*LPRESOURCE_CALLBACK)( HRESOURCE, HRESOURCE , PVOID );
  886.  
  887.  
  888. BOOL
  889. WINAPI
  890. ResUtilResourcesEqual(
  891.     IN HRESOURCE    hSelf,
  892.     IN HRESOURCE    hResource
  893.     );
  894.  
  895.  
  896. BOOL
  897. WINAPI
  898. ResUtilResourceTypesEqual(
  899.     IN LPCWSTR      lpszResourceTypeName,
  900.     IN HRESOURCE    hResource
  901.     );
  902.  
  903. BOOL
  904. WINAPI
  905. ResUtilIsResourceClassEqual(
  906.     IN PCLUS_RESOURCE_CLASS_INFO    prci,
  907.     IN HRESOURCE                    hResource
  908.     );
  909.  
  910. DWORD
  911. WINAPI
  912. ResUtilEnumResources(
  913.     IN HRESOURCE            hSelf,
  914.     IN LPCWSTR              lpszResTypeName,
  915.     IN LPRESOURCE_CALLBACK  pResCallBack,
  916.     IN PVOID                pParameter
  917.     );
  918.  
  919. HRESOURCE
  920. WINAPI
  921. ResUtilGetResourceDependency(
  922.     IN HANDLE       hSelf,
  923.     IN LPCWSTR      lpszResourceType
  924.     );
  925.  
  926. HRESOURCE
  927. WINAPI
  928. ResUtilGetResourceDependencyByName(
  929.     IN HCLUSTER hCluster,
  930.     IN HANDLE   hSelf,
  931.     IN LPCWSTR  lpszResourceType,
  932.     IN BOOL     bRecurse
  933.     );
  934.  
  935. HRESOURCE
  936. WINAPI
  937. ResUtilGetResourceDependencyByClass(
  938.     IN HCLUSTER                     hCluster,
  939.     IN HANDLE                       hSelf,
  940.     IN PCLUS_RESOURCE_CLASS_INFO    prci,
  941.     IN BOOL                         bRecurse
  942.     );
  943.  
  944. HRESOURCE
  945. WINAPI
  946. ResUtilGetResourceNameDependency(
  947.     IN LPCWSTR      lpszResourceName,
  948.     IN LPCWSTR      lpszResourceType
  949.     );
  950.  
  951. DWORD
  952. WINAPI
  953. ResUtilGetResourceDependentIPAddressProps(
  954.     IN      HRESOURCE   hResource,
  955.     OUT     LPWSTR      pszAddress,
  956.     IN OUT  DWORD *     pcchAddress,
  957.     OUT     LPWSTR      pszSubnetMask,
  958.     IN OUT  DWORD *     pcchSubnetMask,
  959.     OUT     LPWSTR      pszNetwork,
  960.     IN OUT  DWORD *     pcchNetwork
  961.     );
  962.  
  963. DWORD
  964. WINAPI
  965. ResUtilFindDependentDiskResourceDriveLetter( 
  966.     IN     HCLUSTER  hCluster,             // handle to cluster
  967.     IN     HRESOURCE hResource,            // handle to resource to query for dependencies
  968.     IN     LPWSTR    pszDriveLetter,       // buffer to store drive letter (ex. "X:\0")
  969.     IN OUT DWORD     *pcchDriveLetter      // IN size of the pszDriveLetter buffer, OUT size of buffer required
  970.     );
  971.  
  972. #ifdef __cplusplus
  973. }
  974. #endif
  975.  
  976.  
  977. #endif // ifdef _RESAPI_DEFINES_
  978. #pragma option pop /*P_O_Pop*/
  979.