Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

508 lines
20 KiB

  1. //
  2. // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
  3. //
  4. // ***************************************************************************
  5. //
  6. // Original Author: Rajesh Rao
  7. //
  8. // $Author: rajeshr $
  9. // $Date: 9/16/98 4:43p $
  10. // $Workfile:instprov.h $
  11. //
  12. // $Modtime: 9/16/98 11:21a $
  13. // $Revision: 1 $
  14. // $Nokeywords: $
  15. //
  16. //
  17. // Description: Contains the declaration for the DS Instance Provider class.
  18. //
  19. //***************************************************************************
  20. /////////////////////////////////////////////////////////////////////////
  21. #ifndef DS_INSTANCE_PROVIDER_H
  22. #define DS_INSTANCE_PROVIDER_H
  23. // Forward declaration for the initializer class
  24. class CDSInstanceProviderInitializer;
  25. class CLDAPInstanceProvider : public IWbemProviderInit, public IWbemServices
  26. {
  27. // The initialization class is a friend of this class
  28. friend CDSInstanceProviderInitializer;
  29. public:
  30. // Create the object
  31. CLDAPInstanceProvider () ;
  32. virtual ~CLDAPInstanceProvider () ;
  33. ////////////////////////////////////////
  34. //IUnknown members
  35. ////////////////////////////////////////
  36. STDMETHODIMP QueryInterface ( REFIID , LPVOID FAR * ) ;
  37. STDMETHODIMP_( ULONG ) AddRef () ;
  38. STDMETHODIMP_( ULONG ) Release () ;
  39. ////////////////////////////////////////
  40. //IWbemProviderInit members
  41. ////////////////////////////////////////
  42. virtual HRESULT STDMETHODCALLTYPE Initialize(
  43. LPWSTR wszUser,
  44. LONG lFlags,
  45. LPWSTR wszNamespace,
  46. LPWSTR wszLocale,
  47. IWbemServices __RPC_FAR *pNamespace,
  48. IWbemContext __RPC_FAR *pCtx,
  49. IWbemProviderInitSink __RPC_FAR *pInitSink) ;
  50. ////////////////////////////////////////
  51. //IWbemServices members
  52. ////////////////////////////////////////
  53. virtual HRESULT STDMETHODCALLTYPE OpenNamespace(
  54. /* [in] */ const BSTR strNamespace,
  55. /* [in] */ long lFlags,
  56. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  57. /* [unique][in][out] */ IWbemServices __RPC_FAR *__RPC_FAR *ppWorkingNamespace,
  58. /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppResult);
  59. virtual HRESULT STDMETHODCALLTYPE CancelAsyncCall(
  60. /* [in] */ IWbemObjectSink __RPC_FAR *pSink);
  61. virtual HRESULT STDMETHODCALLTYPE QueryObjectSink(
  62. /* [in] */ long lFlags,
  63. /* [out] */ IWbemObjectSink __RPC_FAR *__RPC_FAR *ppResponseHandler);
  64. virtual HRESULT STDMETHODCALLTYPE GetObject(
  65. /* [in] */ const BSTR strObjectPath,
  66. /* [in] */ long lFlags,
  67. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  68. /* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject,
  69. /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
  70. virtual HRESULT STDMETHODCALLTYPE GetObjectAsync(
  71. /* [in] */ const BSTR strObjectPath,
  72. /* [in] */ long lFlags,
  73. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  74. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  75. virtual HRESULT STDMETHODCALLTYPE PutClass(
  76. /* [in] */ IWbemClassObject __RPC_FAR *pObject,
  77. /* [in] */ long lFlags,
  78. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  79. /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
  80. virtual HRESULT STDMETHODCALLTYPE PutClassAsync(
  81. /* [in] */ IWbemClassObject __RPC_FAR *pObject,
  82. /* [in] */ long lFlags,
  83. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  84. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  85. virtual HRESULT STDMETHODCALLTYPE DeleteClass(
  86. /* [in] */ const BSTR strClass,
  87. /* [in] */ long lFlags,
  88. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  89. /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
  90. virtual HRESULT STDMETHODCALLTYPE DeleteClassAsync(
  91. /* [in] */ const BSTR strClass,
  92. /* [in] */ long lFlags,
  93. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  94. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  95. virtual HRESULT STDMETHODCALLTYPE CreateClassEnum(
  96. /* [in] */ const BSTR strSuperclass,
  97. /* [in] */ long lFlags,
  98. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  99. /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
  100. virtual HRESULT STDMETHODCALLTYPE CreateClassEnumAsync(
  101. /* [in] */ const BSTR strSuperclass,
  102. /* [in] */ long lFlags,
  103. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  104. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  105. virtual HRESULT STDMETHODCALLTYPE PutInstance(
  106. /* [in] */ IWbemClassObject __RPC_FAR *pInst,
  107. /* [in] */ long lFlags,
  108. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  109. /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
  110. virtual HRESULT STDMETHODCALLTYPE PutInstanceAsync(
  111. /* [in] */ IWbemClassObject __RPC_FAR *pInst,
  112. /* [in] */ long lFlags,
  113. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  114. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  115. virtual HRESULT STDMETHODCALLTYPE DeleteInstance(
  116. /* [in] */ const BSTR strObjectPath,
  117. /* [in] */ long lFlags,
  118. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  119. /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
  120. virtual HRESULT STDMETHODCALLTYPE DeleteInstanceAsync(
  121. /* [in] */ const BSTR strObjectPath,
  122. /* [in] */ long lFlags,
  123. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  124. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  125. virtual HRESULT STDMETHODCALLTYPE CreateInstanceEnum(
  126. /* [in] */ const BSTR strClass,
  127. /* [in] */ long lFlags,
  128. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  129. /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
  130. virtual HRESULT STDMETHODCALLTYPE CreateInstanceEnumAsync(
  131. /* [in] */ const BSTR strClass,
  132. /* [in] */ long lFlags,
  133. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  134. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  135. virtual HRESULT STDMETHODCALLTYPE ExecQuery(
  136. /* [in] */ const BSTR strQueryLanguage,
  137. /* [in] */ const BSTR strQuery,
  138. /* [in] */ long lFlags,
  139. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  140. /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
  141. virtual HRESULT STDMETHODCALLTYPE ExecQueryAsync(
  142. /* [in] */ const BSTR strQueryLanguage,
  143. /* [in] */ const BSTR strQuery,
  144. /* [in] */ long lFlags,
  145. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  146. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  147. virtual HRESULT STDMETHODCALLTYPE ExecNotificationQuery(
  148. /* [in] */ const BSTR strQueryLanguage,
  149. /* [in] */ const BSTR strQuery,
  150. /* [in] */ long lFlags,
  151. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  152. /* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
  153. virtual HRESULT STDMETHODCALLTYPE ExecNotificationQueryAsync(
  154. /* [in] */ const BSTR strQueryLanguage,
  155. /* [in] */ const BSTR strQuery,
  156. /* [in] */ long lFlags,
  157. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  158. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  159. virtual HRESULT STDMETHODCALLTYPE ExecMethod(
  160. /* [in] */ const BSTR strObjectPath,
  161. /* [in] */ const BSTR strMethodName,
  162. /* [in] */ long lFlags,
  163. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  164. /* [in] */ IWbemClassObject __RPC_FAR *pInParams,
  165. /* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppOutParams,
  166. /* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
  167. virtual HRESULT STDMETHODCALLTYPE ExecMethodAsync(
  168. /* [in] */ const BSTR strObjectPath,
  169. /* [in] */ const BSTR strMethodName,
  170. /* [in] */ long lFlags,
  171. /* [in] */ IWbemContext __RPC_FAR *pCtx,
  172. /* [in] */ IWbemClassObject __RPC_FAR *pInParams,
  173. /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
  174. protected:
  175. // The IWbemServices pointer stored from Initialize()
  176. IWbemServices *m_IWbemServices;
  177. // SHows whether the call to Initialize() was successful
  178. BOOLEAN m_bInitializedSuccessfully;
  179. // The IWbemClassObject pointer to the Uint8ArrayClass
  180. IWbemClassObject *m_pWbemUin8ArrayClass;
  181. // The IWbemClassObject pointer to the DNWithBinaryClass
  182. IWbemClassObject *m_pWbemDNWithBinaryClass;
  183. // The IWbemClassObject pointer to the DNWithStringClass
  184. IWbemClassObject *m_pWbemDNWithStringClass;
  185. // The IWbemClassObject interface to the associations class
  186. IWbemClassObject *m_pAssociationsClass;
  187. // The path to the top level container
  188. LPWSTR m_lpszTopLevelContainerPath;
  189. // Gets the IDIrectoryObject interface on an ADSI instance
  190. HRESULT MapPropertyValueToWBEM(BSTR strWbemName, IWbemClassObject *pWbemClass, IWbemClassObject *pWbemObject, PADS_ATTR_INFO pAttribute);
  191. //***************************************************************************
  192. //
  193. // CLDAPInstanceProvider::IsContainedIn
  194. //
  195. // Purpose: Checks whether a containment is valid
  196. //
  197. // Parameters:
  198. // pszChildInstance : The WBEM Name of the child class
  199. // pszParentInstance : The WBEM Name of the parent class
  200. //
  201. // Return Value: The COM status of the request
  202. //
  203. //***************************************************************************
  204. HRESULT IsContainedIn(LPCWSTR pszChildInstance, LPCWSTR pszParentInstance);
  205. //***************************************************************************
  206. //
  207. // CLDAPInstanceProvider::CreateInstance
  208. //
  209. // Purpose: Checks whether a containment is valid
  210. //
  211. // Parameters:
  212. // strChildName : The WBEM Name of the child instance
  213. // strParentName : The WBEM Name of the parent instance
  214. //
  215. // Return Value: The COM status of the request. THe user should free the returned
  216. // IWbemClassObject when done.
  217. //
  218. //***************************************************************************
  219. HRESULT CreateWBEMInstance(BSTR strChildName, BSTR strParentName, IWbemClassObject **ppInstance);
  220. //***************************************************************************
  221. //
  222. // CLDAPInstanceProvider::ModifyExistingADSIInstance
  223. //
  224. // Purpose: Modify an existing ADSI Object using information from the WBEM object
  225. //
  226. // Parameters:
  227. // pWbemInstance : The WBEM instance being mapped
  228. // pszADSIPath : The path to the ADSI instance
  229. // pExistingObject : The CADSIInstance pointer on the existing instance
  230. // pszADSIClass : The ADSI class name of the new instance
  231. //
  232. // Return Value: The COM status of the request.
  233. //
  234. //***************************************************************************
  235. HRESULT ModifyExistingADSIInstance(IWbemClassObject *pWbemInstance, LPCWSTR pszADSIPath, CADSIInstance *pExistingObject, LPCWSTR pszADSIClass, IWbemContext *pCtx);
  236. //***************************************************************************
  237. //
  238. // CLDAPInstanceProvider::CreateNewADSIInstance
  239. //
  240. // Purpose: To create a new ADSI instance form a WBEM instance
  241. //
  242. // Parameters:
  243. // pWbemInstance : The WBEM instance being mapped
  244. // pszADSIPath : The path to the new ADSI instance
  245. // pszADSIClass : The ADSI class name of the new instance
  246. //
  247. // Return Value: The COM status of the request.
  248. //
  249. //***************************************************************************
  250. HRESULT CreateNewADSIInstance(IWbemClassObject *pWbemInstance, LPCWSTR pszADSIPath, LPCWSTR pszADSIClass);
  251. //***************************************************************************
  252. //
  253. // CLDAPInstanceProvider::MapPropertyValueToADSI
  254. //
  255. // Purpose: To map a WBEM property to ADSI
  256. //
  257. // strPropertyName : The WBEM name of the property
  258. // vPropertyValue : The variant representing the proeprty value
  259. // cType : The CIMTYPE of the property
  260. // lFlavour : The WBEM flavour of the proeprty
  261. // pAttributeEntry : A pointer to an ADS_ATTR_INFO structure that will be filled in.
  262. //
  263. //***************************************************************************
  264. HRESULT MapPropertyValueToADSI(IWbemClassObject *pWbemInstance, BSTR strPropertyName, VARIANT vPropertyValue, CIMTYPE cType, LONG lFlavour, PADS_ATTR_INFO pAttributeEntry);
  265. //***************************************************************************
  266. //
  267. // CLDAPInstanceProvider::DoChildContainmentQuery
  268. //
  269. // Purpose: Find the parent of a given child and create an association class
  270. //
  271. // Parameters:
  272. // pszChildPath : The ADSI path of the child instance
  273. // pResponseHandler : A sink on which the resulting objects are indicated
  274. // pListIndicatedSoFar : To avoid duplicate indications (WinMgmt will lot filter them), a
  275. // list of objects indicated so far is kept. Any objects in this list are
  276. // not indicated again
  277. //
  278. // Return Value: The COM status of the request.
  279. //
  280. //***************************************************************************
  281. HRESULT DoChildContainmentQuery(LPCWSTR pszChildPath, IWbemObjectSink *pResponseHandler, CNamesList *pListIndicatedSoFar);
  282. //***************************************************************************
  283. //
  284. // CLDAPInstanceProvider::DoParentContainmentQuery
  285. //
  286. // Purpose: Enumerate the children of a given parent and create association classes
  287. //
  288. // Parameters:
  289. // pszParentPath : The ADSI path of the parent instance
  290. // pResponseHandler : A sink on which the resulting objects are indicated
  291. // pListIndicatedSoFar : To avoid duplicate indications (WinMgmt will lot filter them), a
  292. // list of objects indicated so far is kept. Any objects in this list are
  293. // not indicated again
  294. //
  295. // Return Value: The COM status of the request.
  296. //
  297. //***************************************************************************
  298. HRESULT DoParentContainmentQuery(LPCWSTR pszParentPath, IWbemObjectSink *pResponseHandler, CNamesList *pListIndicatedSoFar);
  299. // Maps an ADSI Instance to WBEM
  300. HRESULT MapADSIInstance(CADSIInstance *pADSInstance, IWbemClassObject *pWbemClass, IWbemClassObject *pWbemObject);
  301. private:
  302. // The COM Reference count
  303. long m_lReferenceCount ;
  304. // These are the search preferences often used
  305. ADS_SEARCHPREF_INFO m_pSearchInfo[2];
  306. // A query for getting the DN associators of a class
  307. static LPCWSTR QUERY_FORMAT;
  308. static BSTR QUERY_LANGUAGE;
  309. static BSTR DN_PROPERTY;
  310. static BSTR ROOT_DN_PROPERTY;
  311. // Some literals
  312. static LPCWSTR DEFAULT_NAMING_CONTEXT_ATTR;
  313. static LPCWSTR OBJECT_CLASS_EQUALS;
  314. static BSTR CLASS_STR;
  315. static BSTR ADSI_PATH_STR;
  316. static BSTR UINT8ARRAY_STR;
  317. static BSTR DN_WITH_BINARY_CLASS_STR;
  318. static BSTR DN_WITH_STRING_CLASS_STR;
  319. static BSTR VALUE_PROPERTY_STR;
  320. static BSTR DN_STRING_PROPERTY_STR;
  321. static BSTR INSTANCE_ASSOCIATION_CLASS_STR;
  322. static BSTR CHILD_INSTANCE_PROPERTY_STR;
  323. static BSTR PARENT_INSTANCE_PROPERTY_STR;
  324. static BSTR RELPATH_STR;
  325. static BSTR ATTRIBUTE_SYNTAX_STR;
  326. static BSTR DEFAULT_OBJECT_CATEGORY_STR;
  327. static BSTR LDAP_DISPLAY_NAME_STR;
  328. static BSTR PUT_EXTENSIONS_STR;
  329. static BSTR PUT_EXT_PROPERTIES_STR;
  330. static BSTR CIMTYPE_STR;
  331. // Properties of LDAP://RootDSE
  332. static BSTR SUBSCHEMASUBENTRY_STR;
  333. static BSTR CURRENTTIME_STR;
  334. static BSTR SERVERNAME_STR;
  335. static BSTR NAMINGCONTEXTS_STR;
  336. static BSTR DEFAULTNAMINGCONTEXT_STR;
  337. static BSTR SCHEMANAMINGCONTEXT_STR;
  338. static BSTR CONFIGURATIONNAMINGCONTEXT_STR;
  339. static BSTR ROOTDOMAINNAMINGCONTEXT_STR;
  340. static BSTR SUPPORTEDCONTROLS_STR;
  341. static BSTR SUPPORTEDVERSION_STR;
  342. static BSTR DNSHOSTNAME_STR;
  343. static BSTR DSSERVICENAME_STR;
  344. static BSTR HIGHESTCOMMITEDUSN_STR;
  345. static BSTR LDAPSERVICENAME_STR;
  346. static BSTR SUPPORTEDCAPABILITIES_STR;
  347. static BSTR SUPPORTEDLDAPPOLICIES_STR;
  348. static BSTR SUPPORTEDSASLMECHANISMS_STR;
  349. // Process query for DS Associations
  350. HRESULT ProcessAssociationQuery(
  351. IWbemContext __RPC_FAR *pCtx,
  352. IWbemObjectSink __RPC_FAR *pResponseHandler,
  353. SQL1_Parser *pParser);
  354. // Process Query for DS Instances
  355. HRESULT ProcessInstanceQuery(
  356. BSTR strClass,
  357. BSTR strQuery,
  358. IWbemContext __RPC_FAR *pCtx,
  359. IWbemObjectSink __RPC_FAR *pResponseHandler,
  360. SQL1_Parser *pParser);
  361. // COnverts a WQL query to an LDAP Filter. If possible
  362. HRESULT ConvertWQLToLDAPQuery(SQL_LEVEL_1_RPN_EXPRESSION *pExp, LPWSTR pszLDAPQuery);
  363. // Does a query on a specified Root DN
  364. HRESULT DoSingleQuery(BSTR strClass, IWbemClassObject *pWbemClass, LPCWSTR pszRootDN, LPCWSTR pszLDAPQuery, IWbemObjectSink *pResponseHandler);
  365. // Gets any static configuration data for enumerating/querying a given class
  366. HRESULT GetRootDN( LPCWSTR pszClass, LPWSTR **ppszRootDN, DWORD *pdwCount, IWbemContext *pCtx);
  367. HRESULT MapEmbeddedObjectToWBEM(PADSVALUE pAttribute, LPCWSTR pszQualifierName, IUnknown **ppEmbeddedObject);
  368. HRESULT MapUint8ArrayToWBEM(PADSVALUE pAttribute, IUnknown **ppEmbeddedObject);
  369. HRESULT MapDNWithBinaryToWBEM(PADSVALUE pAttribute, IUnknown **ppEmbeddedObject);
  370. HRESULT MapDNWithStringToWBEM(PADSVALUE pAttribute, IUnknown **ppEmbeddedObject);
  371. HRESULT MapByteArray(LPBYTE lpBinaryValue, DWORD dwLength, const BSTR strPropertyName, IWbemClassObject *pInstance);
  372. HRESULT ProcessRootDSEGetObject(BSTR strClassName, IWbemObjectSink *pResponseHandler, IWbemContext *pCtx);
  373. HRESULT MapRootDSE(IADs *pADSIRootDSE, IWbemClassObject *pWBEMRootDSE);
  374. //***************************************************************************
  375. //
  376. // CLDAPInstanceProvider::SetStringValues
  377. //
  378. // Purpose: See Header File
  379. //
  380. //***************************************************************************
  381. HRESULT SetStringValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  382. //***************************************************************************
  383. //
  384. // CLDAPInstanceProvider::SetBooleanValues
  385. //
  386. // Purpose: See Header File
  387. //
  388. //***************************************************************************
  389. HRESULT SetBooleanValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  390. //***************************************************************************
  391. //
  392. // CLDAPInstanceProvider::SetIntegerValues
  393. //
  394. // Purpose: See Header File
  395. //
  396. //***************************************************************************
  397. HRESULT SetIntegerValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  398. //***************************************************************************
  399. //
  400. // CLDAPInstanceProvider::SetOctetStringValues
  401. //
  402. // Purpose: See Header File
  403. //
  404. //***************************************************************************
  405. HRESULT SetOctetStringValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  406. HRESULT SetDNWithBinaryValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  407. HRESULT SetDNWithStringValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  408. //***************************************************************************
  409. //
  410. // CLDAPInstanceProvider::SetStringValues
  411. //
  412. // Purpose: See Header File
  413. //
  414. //***************************************************************************
  415. HRESULT SetTimeValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  416. //***************************************************************************
  417. //
  418. // CLDAPInstanceProvider::SetStringValues
  419. //
  420. // Purpose: See Header File
  421. //
  422. //***************************************************************************
  423. HRESULT SetLargeIntegerValues(PADS_ATTR_INFO pAttributeEntry, ADSTYPE adType, VARIANT *pvPropertyValue);
  424. //***************************************************************************
  425. //
  426. // CLDAPInstanceProvider::SetObjectClassAttribute
  427. //
  428. // Purpose: See Header File
  429. //
  430. //***************************************************************************
  431. void SetObjectClassAttribute(PADS_ATTR_INFO pAttributeEntry, LPCWSTR pszADSIClassName);
  432. };
  433. #endif // DS_INSTANCE_PROVIDER_H