home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / RESAPI.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  16.7 KB  |  774 lines

  1. #pragma option push -b -a8 -pc -A- /*P_O_Push_S*/
  2. /*++
  3.  
  4. Copyright (c) 1995-1997  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. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. #include "windows.h"
  26. #include "clusapi.h"
  27. #include "stdio.h"
  28.  
  29. #define IN
  30. #define OUT
  31.  
  32. //
  33. // Definitions for entrypoints exported by a resource DLL.
  34. //
  35. #define STARTUP_ROUTINE "Startup"
  36.  
  37. #define CLRES_V1_FUNCTION_SIZE   sizeof(CLRES_V1_FUNCTIONS)
  38. #define CLRES_VERSION_V1_00    0x100
  39.  
  40. #define CLRES_V1_FUNCTION_TABLE( _Name,                     \
  41.                                  _Version,                  \
  42.                                  _Prefix,                   \
  43.                                  _Arbitrate,                \
  44.                                  _Release,                  \
  45.                                  _ResControl,               \
  46.                                  _ResTypeControl            \
  47.                                  )                          \
  48. CLRES_FUNCTION_TABLE _Name = { CLRES_V1_FUNCTION_SIZE,      \
  49.                                _Version,                    \
  50.                                _Prefix##Open,               \
  51.                                _Prefix##Close,              \
  52.                                _Prefix##Online,             \
  53.                                _Prefix##Offline,            \
  54.                                _Prefix##Terminate,          \
  55.                                _Prefix##LooksAlive,         \
  56.                                _Prefix##IsAlive,            \
  57.                                _Arbitrate,                  \
  58.                                _Release,                    \
  59.                                _ResControl,                 \
  60.                                _ResTypeControl }
  61.  
  62. #endif // ifndef _RESAPI_DEFINES_
  63.  
  64. #ifndef _RESAPI_
  65. #define _RESAPI_
  66.  
  67. //
  68. // Define a RESID
  69. //
  70.  
  71. typedef PVOID RESID;
  72.  
  73. //
  74. // Define a RESOURCE_HANDLE
  75. //
  76.  
  77. typedef HANDLE   RESOURCE_HANDLE;
  78.  
  79. //
  80. // Define the Resource Status structure.
  81. //
  82.  
  83. typedef struct RESOURCE_STATUS {
  84.     CLUSTER_RESOURCE_STATE  ResourceState;
  85.     DWORD           CheckPoint;
  86.     DWORD           WaitHint;
  87.     HANDLE          EventHandle;
  88. } RESOURCE_STATUS, *PRESOURCE_STATUS;
  89.  
  90.  
  91. #define ResUtilInitializeResourceStatus( _resource_status_ ) \
  92.     ZeroMemory( _resource_status_, sizeof(RESOURCE_STATUS) )
  93.  
  94. //
  95. // Define Resource DLL callback method for updating the state of a resource.
  96. //
  97.  
  98. typedef
  99. VOID
  100. (_stdcall *PSET_RESOURCE_STATUS_ROUTINE) (
  101.     IN RESOURCE_HANDLE ResourceHandle,
  102.     IN PRESOURCE_STATUS ResourceStatus
  103.     );
  104.  
  105. //
  106. // Define Resource DLL callback method for notifying that a quorum
  107. // resource DLL failed to hold the quorum resource.
  108. //
  109. typedef
  110. VOID
  111. (_stdcall *PQUORUM_RESOURCE_LOST) (
  112.     IN RESOURCE_HANDLE Resource
  113.     );
  114.  
  115. //
  116. // Define Resource DLL callback method for logging events.
  117. //
  118. typedef enum LOG_LEVEL {
  119.     LOG_INFORMATION,
  120.     LOG_WARNING,
  121.     LOG_ERROR,
  122.     LOG_SEVERE
  123. } LOG_LEVEL, *PLOG_LEVEL;
  124.  
  125. typedef
  126. VOID
  127. (_stdcall *PLOG_EVENT_ROUTINE) (
  128.     IN RESOURCE_HANDLE ResourceHandle,
  129.     IN LOG_LEVEL LogLevel,
  130.     IN LPCWSTR FormatString,
  131.     ...
  132.     );
  133.  
  134. typedef
  135. RESID
  136. (_stdcall *POPEN_ROUTINE) (
  137.     IN LPCWSTR ResourceName,
  138.     IN HKEY ResourceKey,
  139.     IN RESOURCE_HANDLE ResourceHandle
  140.     );
  141.  
  142. typedef
  143. VOID
  144. (_stdcall *PCLOSE_ROUTINE) (
  145.     IN RESID Resource
  146.     );
  147.  
  148. typedef
  149. DWORD
  150. (_stdcall *PONLINE_ROUTINE) (
  151.     IN RESID Resource,
  152.     IN OUT LPHANDLE EventHandle
  153.     );
  154.  
  155. typedef
  156. DWORD
  157. (_stdcall *POFFLINE_ROUTINE) (
  158.     IN RESID Resource
  159.     );
  160.  
  161. typedef
  162. VOID
  163. (_stdcall *PTERMINATE_ROUTINE) (
  164.     IN RESID Resource
  165.     );
  166.  
  167. typedef
  168. BOOL
  169. (_stdcall *PIS_ALIVE_ROUTINE) (
  170.     IN RESID Resource
  171.     );
  172.  
  173. typedef
  174. BOOL
  175. (_stdcall *PLOOKS_ALIVE_ROUTINE) (
  176.     IN RESID Resource
  177.     );
  178.  
  179. typedef
  180. DWORD
  181. (_stdcall *PARBITRATE_ROUTINE) (
  182.     IN RESID Resource,
  183.     IN PQUORUM_RESOURCE_LOST LostQuorumResource
  184.     );
  185.  
  186. typedef
  187. DWORD
  188. (_stdcall *PRELEASE_ROUTINE) (
  189.     IN RESID Resource
  190.     );
  191.  
  192. typedef
  193. DWORD
  194. (_stdcall *PRESOURCE_CONTROL_ROUTINE) (
  195.     IN RESID Resource,
  196.     IN DWORD ControlCode,
  197.     IN PVOID InBuffer,
  198.     IN DWORD InBufferSize,
  199.     OUT PVOID OutBuffer,
  200.     IN DWORD OutBufferSize,
  201.     OUT LPDWORD BytesReturned
  202.     );
  203.  
  204. typedef
  205. DWORD
  206. (_stdcall *PRESOURCE_TYPE_CONTROL_ROUTINE) (
  207.     IN LPCWSTR ResourceTypeName,
  208.     IN DWORD ControlCode,
  209.     IN PVOID InBuffer,
  210.     IN DWORD InBufferSize,
  211.     OUT PVOID OutBuffer,
  212.     IN DWORD OutBufferSize,
  213.     OUT LPDWORD BytesReturned
  214.     );
  215.  
  216.  
  217. //***************************************************************
  218. //
  219. // Define the Function Table Format
  220. //
  221. //***************************************************************
  222.  
  223. //
  224. // Version 1 Resource DLL Interface definition
  225. //
  226. typedef struct CLRES_V1_FUNCTIONS {
  227.     POPEN_ROUTINE Open;
  228.     PCLOSE_ROUTINE Close;
  229.     PONLINE_ROUTINE Online;
  230.     POFFLINE_ROUTINE Offline;
  231.     PTERMINATE_ROUTINE Terminate;
  232.     PLOOKS_ALIVE_ROUTINE LooksAlive;
  233.     PIS_ALIVE_ROUTINE IsAlive;
  234.     PARBITRATE_ROUTINE Arbitrate;
  235.     PRELEASE_ROUTINE Release;
  236.     PRESOURCE_CONTROL_ROUTINE ResourceControl;
  237.     PRESOURCE_TYPE_CONTROL_ROUTINE ResourceTypeControl;
  238. } CLRES_V1_FUNCTIONS, *PCLRES_V1_FUNCTIONS;
  239.  
  240. //
  241. // Resource DLL Function Table definition
  242. //
  243. #pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
  244. typedef struct CLRES_FUNCTION_TABLE {
  245.     DWORD   TableSize;
  246.     DWORD   Version;
  247.     union {
  248.         CLRES_V1_FUNCTIONS V1Functions;
  249.     };
  250. } CLRES_FUNCTION_TABLE, *PCLRES_FUNCTION_TABLE;
  251. #pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
  252.  
  253. //
  254. // Define the Resource DLL Startup routine. This is the only routine
  255. // that should be exported from a resource DLL.
  256. //
  257.  
  258. //
  259. // Calculate the byte offset of a field in a structure of type type.
  260. //
  261.  
  262. #ifndef FIELD_OFFSET
  263. #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
  264. #endif
  265.  
  266. //
  267. // Property list structures and functions
  268. //
  269. typedef struct RESUTIL_PROPERTY_ITEM {
  270.     LPWSTR  Name;               // Property name
  271.     LPWSTR  KeyName;            // Name of value in cluster database
  272.     DWORD   Format;             // Format: REG_SZ, REG_DWORD, etc.
  273.     DWORD   Default;            // Default value
  274.     DWORD   Minimum;            // Minimum value
  275.     DWORD   Maximum;            // Maximum value
  276.     DWORD   Flags;              // Flags for this item
  277. #define RESUTIL_PROPITEM_READ_ONLY  0x00000001  // Property is read-only
  278. #define RESUTIL_PROPITEM_REQUIRED   0x00000002  // Property is required
  279. #define RESUTIL_PROPITEM_SIGNED     0x00000004  // Numeric property is signed (defaults to unsigned)
  280.  
  281.     DWORD   Offset;             // Byte offset to value in parameter block
  282.                                 //   Assumes MULTI_SZ and BINARY parameters
  283.                                 //   are LPWSTRs followed by DWORDs for length
  284. } RESUTIL_PROPERTY_ITEM, *PRESUTIL_PROPERTY_ITEM;
  285.  
  286.  
  287. typedef
  288. DWORD
  289. (_stdcall *PSTARTUP_ROUTINE) (
  290.     IN LPCWSTR ResourceType,
  291.     IN DWORD MinVersionSupported,
  292.     IN DWORD MaxVersionSupported,
  293.     IN PSET_RESOURCE_STATUS_ROUTINE SetResourceStatus,
  294.     IN PLOG_EVENT_ROUTINE LogEvent,
  295.     OUT PCLRES_FUNCTION_TABLE *FunctionTable
  296.     );
  297.  
  298. //
  299. // Define layout of shared memory used for tracking Resource Monitor state.
  300. //
  301. typedef enum RESOURCE_MONITOR_STATE {
  302.     RmonInitializing,
  303.     RmonIdle,
  304.     RmonStartingResource,
  305.     RmonInitializingResource,
  306.     RmonOnlineResource,
  307.     RmonOfflineResource,
  308.     RmonShutdownResource,
  309.     RmonDeletingResource,
  310.     RmonIsAlivePoll,
  311.     RmonLooksAlivePoll,
  312.     RmonArbitrateResource,
  313.     RmonReleaseResource,
  314.     RmonResourceControl,
  315.     RmonResourceTypeControl
  316. } RESOURCE_MONITOR_STATE;
  317.  
  318. typedef struct MONITOR_STATE {
  319.     LARGE_INTEGER LastUpdate;
  320.     RESOURCE_MONITOR_STATE State;
  321.     HANDLE ActiveResource;
  322.     BOOL   ResmonStop;
  323. } MONITOR_STATE, *PMONITOR_STATE;
  324.  
  325.  
  326. //
  327. // Resource Utility Routines
  328. //
  329.  
  330. DWORD
  331. WINAPI
  332. ResUtilStartResourceService(
  333.     IN LPCTSTR ServiceName,
  334.     OUT LPHANDLE ServiceHandle
  335.     );
  336.  
  337. DWORD
  338. WINAPI
  339. ResUtilVerifyResourceService(
  340.     IN LPCTSTR ServiceName
  341.     );
  342.  
  343. DWORD
  344. WINAPI
  345. ResUtilStopResourceService(
  346.     IN LPCTSTR ServiceName
  347.     );
  348.  
  349. DWORD
  350. WINAPI
  351. ResUtilVerifyService(
  352.     IN HANDLE ServiceHandle
  353.     );
  354.  
  355. DWORD
  356. WINAPI
  357. ResUtilStopService(
  358.     IN HANDLE ServiceHandle
  359.     );
  360.  
  361. BOOL
  362. WINAPI
  363. ResUtilIsPathValid(
  364.     IN LPCWSTR Path
  365.     );
  366.  
  367. DWORD
  368. WINAPI
  369. ResUtilEnumProperties(
  370.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  371.     OUT LPWSTR OutBuffer,
  372.     IN DWORD OutBufferSize,
  373.     OUT LPDWORD BytesReturned,
  374.     OUT LPDWORD Required
  375.     );
  376.  
  377. DWORD
  378. WINAPI
  379. ResUtilEnumPrivateProperties(
  380.     IN PVOID ClusterKey,
  381.     OUT LPWSTR OutBuffer,
  382.     IN DWORD OutBufferSize,
  383.     OUT LPDWORD BytesReturned,
  384.     OUT LPDWORD Required
  385.     );
  386.  
  387. DWORD
  388. WINAPI
  389. ResUtilGetProperties(
  390.     IN PVOID ClusterKey,
  391.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  392.     OUT PVOID OutBuffer,
  393.     IN DWORD OutBufferSize,
  394.     OUT LPDWORD BytesReturned,
  395.     OUT LPDWORD Required
  396.     );
  397.  
  398. DWORD
  399. WINAPI
  400. ResUtilGetAllProperties(
  401.     IN PVOID ClusterKey,
  402.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  403.     OUT PVOID OutBuffer,
  404.     IN DWORD OutBufferSize,
  405.     OUT LPDWORD BytesReturned,
  406.     OUT LPDWORD Required
  407.     );
  408.  
  409. DWORD
  410. WINAPI
  411. ResUtilGetPrivateProperties(
  412.     IN PVOID ClusterKey,
  413.     OUT PVOID OutBuffer,
  414.     IN DWORD OutBufferSize,
  415.     OUT LPDWORD BytesReturned,
  416.     OUT LPDWORD Required
  417.     );
  418.  
  419. DWORD
  420. WINAPI
  421. ResUtilGetPropertySize(
  422.     IN PVOID ClusterKey,
  423.     IN const PRESUTIL_PROPERTY_ITEM Property,
  424.     IN OUT LPDWORD BufferSize,
  425.     IN OUT LPDWORD ItemCount
  426.     );
  427.  
  428. DWORD
  429. WINAPI
  430. ResUtilGetProperty(
  431.     IN PVOID ClusterKey,
  432.     IN const PRESUTIL_PROPERTY_ITEM Property,
  433.     OUT PVOID * OutBuffer,
  434.     IN OUT LPDWORD OutBufferSize
  435.     );
  436.  
  437. DWORD
  438. WINAPI
  439. ResUtilVerifyPropertyTable(
  440.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  441.     IN PVOID Reserved,
  442.     IN BOOL AllowUnknownProperties,
  443.     IN const PVOID InBuffer,
  444.     IN DWORD InBufferSize,
  445.     OUT OPTIONAL LPBYTE OutParams
  446.     );
  447.  
  448. DWORD
  449. WINAPI
  450. ResUtilSetPropertyTable(
  451.     IN PVOID ClusterKey,
  452.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  453.     IN PVOID Reserved,
  454.     IN BOOL AllowUnknownProperties,
  455.     IN const PVOID InBuffer,
  456.     IN DWORD InBufferSize,
  457.     OUT OPTIONAL LPBYTE OutParams
  458.     );
  459.  
  460. DWORD
  461. WINAPI
  462. ResUtilSetPropertyParameterBlock(
  463.     IN PVOID ClusterKey,
  464.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  465.     IN PVOID Reserved,
  466.     IN const LPBYTE InParams,
  467.     IN const PVOID InBuffer,
  468.     IN DWORD InBufferSize,
  469.     OUT OPTIONAL LPBYTE OutParams
  470.     );
  471.  
  472. DWORD
  473. WINAPI
  474. ResUtilGetPropertiesToParameterBlock(
  475.     IN PVOID ClusterKey,
  476.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  477.     OUT LPBYTE OutParams,
  478.     IN BOOL CheckForRequiredProperties,
  479.     OUT OPTIONAL LPWSTR * NameOfPropInError
  480.     );
  481.  
  482. DWORD
  483. WINAPI
  484. ResUtilPropertyListFromParameterBlock(
  485.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  486.     OUT PVOID * OutBuffer,
  487.     IN OUT LPDWORD OutBufferSize,
  488.     IN const LPBYTE InParams,
  489.     OUT LPDWORD BytesReturned,
  490.     OUT LPDWORD Required
  491.     );
  492.  
  493. DWORD
  494. WINAPI
  495. ResUtilDupParameterBlock(
  496.     OUT LPBYTE OutParams,
  497.     IN const LPBYTE InParams,
  498.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable
  499.     );
  500.  
  501. void
  502. WINAPI
  503. ResUtilFreeParameterBlock(
  504.     IN OUT LPBYTE OutParams,
  505.     IN const LPBYTE InParams,
  506.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable
  507.     );
  508.  
  509. DWORD
  510. WINAPI
  511. ResUtilAddUnknownProperties(
  512.     IN PVOID ClusterKey,
  513.     IN const PRESUTIL_PROPERTY_ITEM PropertyTable,
  514.     IN OUT PVOID OutBuffer,
  515.     IN DWORD OutBufferSize,
  516.     IN OUT LPDWORD BytesReturned,
  517.     IN OUT LPDWORD Required
  518.     );
  519.  
  520. DWORD
  521. WINAPI
  522. ResUtilSetPrivatePropertyList(
  523.     IN PVOID ClusterKey,
  524.     IN const PVOID InBuffer,
  525.     IN DWORD InBufferSize
  526.     );
  527.  
  528. DWORD
  529. WINAPI
  530. ResUtilVerifyPrivatePropertyList(
  531.     IN const PVOID InBuffer,
  532.     IN DWORD InBufferSize
  533.     );
  534.  
  535. DWORD
  536. WINAPI
  537. ResUtilGetBinaryValue(
  538.     IN HKEY ClusterKey,
  539.     IN LPCWSTR ValueName,
  540.     OUT LPBYTE * OutValue,
  541.     OUT DWORD * OutValueSize
  542.     );
  543.  
  544. PWSTR
  545. WINAPI
  546. ResUtilDupString(
  547.     IN LPCWSTR Value
  548.     );
  549.  
  550. LPWSTR
  551. WINAPI
  552. ResUtilGetSzValue(
  553.     IN HKEY ClusterKey,
  554.     IN LPCWSTR ValueName
  555.     );
  556.  
  557. #define ResUtilGetMultiSzValue( ClusterKey, ValueName, OutValue, OutValueSize ) \
  558.     ResUtilGetBinaryValue( ClusterKey, ValueName, (LPBYTE *) OutValue, OutValueSize )
  559.  
  560. DWORD
  561. WINAPI
  562. ResUtilGetDwordValue(
  563.     IN HKEY ClusterKey,
  564.     IN LPCWSTR ValueName,
  565.     OUT LPDWORD OutValue,
  566.     IN DWORD DefaultValue OPTIONAL
  567.     );
  568.  
  569. DWORD
  570. WINAPI
  571. ResUtilSetBinaryVakye(
  572.     IN HKEY ClusterKey,
  573.     IN LPCWSTR ValueName,
  574.     IN const LPBYTE NewValue,
  575.     IN DWORD NewValueSize,
  576.     IN OUT LPBYTE * OutValue,
  577.     IN OUT LPDWORD OutValueSize
  578.     );
  579.  
  580. DWORD
  581. WINAPI
  582. ResUtilSetSzValue(
  583.     IN HKEY ClusterKey,
  584.     IN LPCWSTR ValueName,
  585.     IN LPCWSTR NewValue,
  586.     IN OUT LPWSTR * OutString
  587.     );
  588.  
  589. DWORD
  590. WINAPI
  591. ResUtilSetExpandSzValue(
  592.     IN HKEY ClusterKey,
  593.     IN LPCWSTR ValueName,
  594.     IN LPCWSTR NewValue,
  595.     IN OUT LPWSTR * OutString
  596.     );
  597.  
  598. DWORD
  599. WINAPI
  600. ResUtilSetMultiSzValue(
  601.     IN HKEY ClusterKey,
  602.     IN LPCWSTR ValueName,
  603.     IN LPCWSTR NewValue,
  604.     IN DWORD NewValueSize,
  605.     IN OUT LPWSTR * OutValue,
  606.     IN OUT LPDWORD OutValueSize
  607.     );
  608.  
  609. DWORD
  610. WINAPI
  611. ResUtilSetDwordValue(
  612.     IN HKEY ClusterKey,
  613.     IN LPCWSTR ValueName,
  614.     IN DWORD NewValue,
  615.     IN OUT LPDWORD OutValue
  616.     );
  617.  
  618. DWORD
  619. WINAPI
  620. ResUtilGetBinaryProperty(
  621.     OUT LPBYTE * OutValue,
  622.     OUT LPDWORD OutValueSize,
  623.     IN const PCLUSPROP_BINARY ValueStruct,
  624.     IN const LPBYTE OldValue,
  625.     IN DWORD OldValueSize,
  626.     OUT LPBYTE * PropBuffer,
  627.     OUT LPDWORD PropBufferSize
  628.     );
  629.  
  630. DWORD
  631. WINAPI
  632. ResUtilGetSzProperty(
  633.     OUT LPWSTR * OutValue,
  634.     IN const PCLUSPROP_SZ ValueStruct,
  635.     IN LPCWSTR OldValue,
  636.     OUT LPBYTE * PropBuffer,
  637.     OUT LPDWORD PropBufferSize
  638.     );
  639.  
  640. DWORD
  641. WINAPI
  642. ResUtilGetMultiSzProperty(
  643.     OUT LPWSTR * OutValue,
  644.     OUT LPDWORD OutValueSize,
  645.     IN const PCLUSPROP_SZ ValueStruct,
  646.     IN LPCWSTR OldValue,
  647.     IN DWORD OldValueSize,
  648.     OUT LPBYTE * PropBuffer,
  649.     OUT LPDWORD PropBufferSize
  650.     );
  651.  
  652. DWORD
  653. WINAPI
  654. ResUtilGetDwordProperty(
  655.     OUT LPDWORD OutValue,
  656.     IN const PCLUSPROP_DWORD ValueStruct,
  657.     IN DWORD OldValue,
  658.     IN DWORD Minimum,
  659.     IN DWORD Maximum,
  660.     OUT LPBYTE * PropBuffer,
  661.     OUT LPDWORD PropBufferSize
  662.     );
  663.  
  664. LPVOID
  665. WINAPI
  666. ResUtilGetEnvironmentWithNetName(
  667.     IN HRESOURCE hResource
  668.     );
  669.  
  670. DWORD
  671. WINAPI
  672. ResUtilFindSzProperty(
  673.     IN const PVOID Buffer,
  674.     IN DWORD BufferSize,
  675.     IN LPCWSTR PropName,
  676.     OUT LPWSTR * FoundString
  677.     );
  678.  
  679. DWORD
  680. WINAPI
  681. ResUtilFindDwordProperty(
  682.     IN const PVOID Buffer,
  683.     IN DWORD BufferSize,
  684.     IN LPCWSTR PropName,
  685.     OUT LPDWORD FoundDword
  686.     );
  687.  
  688. //
  689. // Common worker thread routines that allow a pending operation to
  690. // be cancelled with CORRECT synchronization.
  691. //
  692. typedef struct CLUS_WORKER {
  693.     HANDLE hThread;
  694.     BOOL Terminate;
  695. } CLUS_WORKER, *PCLUS_WORKER;
  696.  
  697. typedef DWORD (WINAPI *PWORKER_START_ROUTINE)(
  698.     PCLUS_WORKER pWorker,
  699.     LPVOID lpThreadParameter
  700.     );
  701.  
  702. DWORD
  703. WINAPI
  704. ClusWorkerCreate(
  705.     OUT PCLUS_WORKER Worker,
  706.     IN PWORKER_START_ROUTINE lpStartAddress,
  707.     IN PVOID lpParameter
  708.     );
  709.  
  710. BOOL
  711. WINAPI
  712. ClusWorkerCheckTerminate(
  713.     IN PCLUS_WORKER Worker
  714.     );
  715.  
  716. VOID
  717. WINAPI
  718. ClusWorkerTerminate(
  719.     IN PCLUS_WORKER Worker
  720.     );
  721.  
  722.  
  723. //Define enumerate resource callback function. This gets called for each resource enumerated
  724. //by ResUtilEnumResources
  725. typedef   DWORD (*LPRESOURCE_CALLBACK)( HRESOURCE, HRESOURCE , PVOID );
  726.  
  727.  
  728. BOOL
  729. WINAPI
  730. ResUtilResourcesEqual(
  731.     IN HRESOURCE    hSelf,
  732.     IN HRESOURCE    hResource
  733.     );
  734.  
  735.  
  736. BOOL
  737. WINAPI
  738. ResUtilResourceTypesEqual(
  739.     IN LPCWSTR      lpszResourceTypeName,
  740.     IN HRESOURCE    hResource
  741.     );
  742.  
  743. DWORD
  744. WINAPI
  745. ResUtilEnumResources(
  746.     IN HRESOURCE            hSelf,
  747.     IN LPCWSTR              lpszResTypeName,
  748.     IN LPRESOURCE_CALLBACK  pResCallBack,
  749.     IN PVOID                pParameter
  750.     );
  751.  
  752. HRESOURCE
  753. WINAPI
  754. ResUtilGetResourceDependency(
  755.     IN HANDLE       hSelf,
  756.     IN LPCWSTR      lpszResourceType
  757.     );
  758.  
  759. HRESOURCE
  760. WINAPI
  761. ResUtilGetResourceNameDependency(
  762.     IN LPCWSTR      lpszResourceName,
  763.     IN LPCWSTR      lpszResourceType
  764.     );
  765.  
  766.  
  767. #ifdef __cplusplus
  768. }
  769. #endif
  770.  
  771.  
  772. #endif // ifdef _RESAPI_DEFINES_
  773. #pragma option pop /*P_O_Pop*/
  774.