Leaked source code of windows server 2003
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.

545 lines
16 KiB

  1. #ifndef _COMMON_H_
  2. #define _COMMON_H_
  3. #define _WIN32_WINNT 0x0500
  4. #define _UNICODE
  5. #define UNICODE
  6. //
  7. // OS includes
  8. //
  9. #if defined(__cplusplus)
  10. extern "C" {
  11. #endif
  12. #include <windows.h>
  13. #include <shellapi.h>
  14. #include <advpub.h>
  15. #include <oleauto.h>
  16. #include <objbase.h>
  17. #include <ocidl.h>
  18. #include <olectl.h>
  19. #include <winhttp.h>
  20. #if defined(__cplusplus)
  21. }
  22. #endif
  23. //
  24. // app includes
  25. //
  26. #pragma warning( disable : 4100 ) // unreferenced formal parameter
  27. #include "registry.h"
  28. #include "mem.h"
  29. #include "dispids.h"
  30. #include "resources.h"
  31. #include "debug.h"
  32. #include "whttptst.h" // generated
  33. #include "hashtable.h"
  34. #include "utils.h"
  35. //
  36. // class declarations
  37. //
  38. typedef class CHashTable<HINTERNET> _HANDLEMAP;
  39. typedef class CHandleMap HANDLEMAP;
  40. typedef class CHandleMap* PHANDLEMAP;
  41. void ScriptCallbackKiller(LPVOID* ppv);
  42. class CHandleMap : public _HANDLEMAP
  43. {
  44. public:
  45. CHandleMap() : _HANDLEMAP(10) {}
  46. ~CHandleMap() {}
  47. void GetHashAndBucket(HINTERNET id, LPDWORD lpHash, LPDWORD lpBucket);
  48. };
  49. typedef class ClassFactory CLSFACTORY;
  50. typedef class ClassFactory* PCLSFACTORY;
  51. class ClassFactory : public IClassFactory
  52. {
  53. public:
  54. DECLAREIUNKNOWN();
  55. DECLAREICLASSFACTORY();
  56. ClassFactory();
  57. ~ClassFactory();
  58. static HRESULT Create(REFIID clsid, REFIID riid, void** ppv);
  59. private:
  60. LONG m_cRefs;
  61. LONG m_cLocks;
  62. };
  63. void WinHttpCallback(
  64. HINTERNET hInternet,
  65. DWORD_PTR dwContext,
  66. DWORD dwInternetStatus,
  67. LPVOID lpvStatusInformation,
  68. DWORD dwStatusInformationLength
  69. );
  70. typedef class WinHttpTest WHTTPTST;
  71. typedef class WinHttpTest* PWHTTPTST;
  72. class WinHttpTest : public IWinHttpTest,
  73. public IProvideClassInfo
  74. {
  75. public:
  76. DECLAREIUNKNOWN();
  77. DECLAREIDISPATCH();
  78. //
  79. // IWinHttpTest
  80. //
  81. HRESULT __stdcall WinHttpOpen(
  82. VARIANT UserAgent,
  83. VARIANT AccessType,
  84. VARIANT ProxyName,
  85. VARIANT ProxyBypass,
  86. VARIANT Flags,
  87. VARIANT *OpenHandle
  88. );
  89. HRESULT __stdcall WinHttpConnect(
  90. VARIANT OpenHandle,
  91. VARIANT ServerName,
  92. VARIANT ServerPort,
  93. VARIANT Reserved,
  94. VARIANT *ConnectHandle
  95. );
  96. HRESULT __stdcall WinHttpOpenRequest(
  97. VARIANT ConnectHandle,
  98. VARIANT Verb,
  99. VARIANT ObjectName,
  100. VARIANT Version,
  101. VARIANT Referrer,
  102. VARIANT AcceptTypes,
  103. VARIANT Flags,
  104. VARIANT *RequestHandle
  105. );
  106. HRESULT __stdcall WinHttpSendRequest(
  107. VARIANT RequestHandle,
  108. VARIANT Headers,
  109. VARIANT HeadersLength,
  110. VARIANT OptionalData,
  111. VARIANT OptionalLength,
  112. VARIANT TotalLength,
  113. VARIANT Context,
  114. VARIANT *Success
  115. );
  116. HRESULT __stdcall WinHttpReceiveResponse(
  117. VARIANT RequestHandle,
  118. VARIANT Reserved,
  119. VARIANT *Success
  120. );
  121. HRESULT __stdcall WinHttpCloseHandle(
  122. VARIANT InternetHandle,
  123. VARIANT *Success
  124. );
  125. HRESULT __stdcall WinHttpReadData(
  126. VARIANT RequestHandle,
  127. VARIANT BufferObject,
  128. VARIANT *Success
  129. );
  130. HRESULT __stdcall WinHttpWriteData(
  131. VARIANT RequestHandle,
  132. VARIANT BufferObject,
  133. VARIANT *Success
  134. );
  135. HRESULT __stdcall WinHttpQueryDataAvailable(
  136. VARIANT RequestHandle,
  137. VARIANT boNumberOfBytesAvailable,
  138. VARIANT *Success
  139. );
  140. HRESULT __stdcall WinHttpQueryOption(
  141. VARIANT InternetHandle,
  142. VARIANT Option,
  143. VARIANT BufferObject,
  144. VARIANT *Success
  145. );
  146. HRESULT __stdcall WinHttpSetOption(
  147. VARIANT InternetHandle,
  148. VARIANT Option,
  149. VARIANT BufferObject,
  150. VARIANT *Success
  151. );
  152. HRESULT __stdcall WinHttpSetTimeouts(
  153. VARIANT InternetHandle,
  154. VARIANT ResolveTimeout,
  155. VARIANT ConnectTimeout,
  156. VARIANT SendTimeout,
  157. VARIANT ReceiveTimeout,
  158. VARIANT *Success
  159. );
  160. HRESULT __stdcall WinHttpAddRequestHeaders(
  161. VARIANT RequestHandle,
  162. VARIANT Headers,
  163. VARIANT HeadersLength,
  164. VARIANT Modifiers,
  165. VARIANT *Success
  166. );
  167. HRESULT __stdcall WinHttpSetCredentials(
  168. VARIANT RequestHandle,
  169. VARIANT AuthTargets,
  170. VARIANT AuthScheme,
  171. VARIANT UserName,
  172. VARIANT Password,
  173. VARIANT AuthParams,
  174. VARIANT *Success
  175. );
  176. HRESULT __stdcall WinHttpQueryAuthSchemes(
  177. VARIANT RequestHandle,
  178. VARIANT SupportedSchemes,
  179. VARIANT PreferredSchemes,
  180. VARIANT AuthTarget,
  181. VARIANT *Success
  182. );
  183. HRESULT __stdcall WinHttpQueryHeaders(
  184. VARIANT RequestHandle,
  185. VARIANT InfoLevel,
  186. VARIANT HeaderName,
  187. VARIANT HeaderValue,
  188. VARIANT HeaderValueLength,
  189. VARIANT *Success
  190. );
  191. HRESULT __stdcall WinHttpTimeFromSystemTime(
  192. VARIANT SystemTime,
  193. VARIANT boHttpTime,
  194. VARIANT *Success
  195. );
  196. HRESULT __stdcall WinHttpTimeToSystemTime(
  197. VARIANT boHttpTime,
  198. VARIANT SystemTime,
  199. VARIANT *Success
  200. );
  201. HRESULT __stdcall WinHttpCrackUrl(
  202. VARIANT Url,
  203. VARIANT UrlLength,
  204. VARIANT Flags,
  205. VARIANT UrlComponents,
  206. VARIANT *Success
  207. );
  208. HRESULT __stdcall WinHttpCreateUrl(
  209. VARIANT UrlComponents,
  210. VARIANT Flags,
  211. VARIANT BufferObject,
  212. VARIANT *Success
  213. );
  214. HRESULT __stdcall WinHttpSetStatusCallback(
  215. VARIANT InternetHandle,
  216. VARIANT CallbackFunction,
  217. VARIANT NotificationFlags,
  218. VARIANT Reserved,
  219. VARIANT *RetVal
  220. );
  221. HRESULT __stdcall HelperGetBufferObject(
  222. VARIANT Size,
  223. VARIANT Type,
  224. VARIANT Flags,
  225. VARIANT *BufferObject
  226. );
  227. HRESULT __stdcall HelperGetUrlComponents(
  228. VARIANT Flags,
  229. VARIANT *UrlComponents
  230. );
  231. HRESULT __stdcall HelperGetSystemTime(
  232. VARIANT Flags,
  233. VARIANT *SystemTime
  234. );
  235. HRESULT __stdcall HelperGetLastError(
  236. VARIANT *Win32ErrorCode
  237. );
  238. DECLAREIPROVIDECLASSINFO();
  239. public:
  240. WinHttpTest();
  241. ~WinHttpTest();
  242. static HRESULT Create(REFIID riid, void** ppv);
  243. private:
  244. HRESULT _Initialize(void);
  245. HRESULT _SetErrorCode(DWORD error);
  246. HRESULT _WinHttpOpen(
  247. LPCWSTR pwszUserAgent,
  248. DWORD dwAccessType,
  249. LPCWSTR pwszProxyName,
  250. LPCWSTR pwszProxyBypass,
  251. DWORD dwFlags,
  252. VARIANT* retval
  253. );
  254. HRESULT _WinHttpConnect(
  255. HINTERNET hSession,
  256. LPCWSTR pwszServerName,
  257. INTERNET_PORT nServerPort,
  258. DWORD dwReserved,
  259. VARIANT* retval
  260. );
  261. HRESULT _WinHttpOpenRequest(
  262. HINTERNET hConnect,
  263. LPCWSTR pwszVerb,
  264. LPCWSTR pwszObjectName,
  265. LPCWSTR pwszVersion,
  266. LPCWSTR pwszReferrer,
  267. LPCWSTR* ppwszAcceptTypes,
  268. DWORD dwFlags,
  269. VARIANT* retval
  270. );
  271. HRESULT _WinHttpSendRequest(
  272. HINTERNET hRequest,
  273. LPCWSTR pwszHeaders,
  274. DWORD dwHeadersLength,
  275. LPVOID lpOptional,
  276. DWORD dwOptionalLength,
  277. DWORD dwTotalLength,
  278. DWORD_PTR dwContext,
  279. VARIANT* retval
  280. );
  281. HRESULT _WinHttpCloseHandle(
  282. HINTERNET hInternet,
  283. VARIANT* retval
  284. );
  285. HRESULT _WinHttpSetStatusCallback(
  286. HINTERNET hInternet,
  287. WINHTTP_STATUS_CALLBACK lpfnCallback,
  288. DWORD dwNotificationFlags,
  289. DWORD_PTR dwReserved,
  290. VARIANT* retval
  291. );
  292. private:
  293. LONG m_cRefs;
  294. ITypeInfo* m_pti;
  295. IWHTWin32ErrorCode* m_pw32ec;
  296. };
  297. typedef class WHTUrlComponents WHTURLCMP;
  298. typedef class WHTUrlComponents* PWHTURLCMP;
  299. class WHTUrlComponents : public IWHTUrlComponents,
  300. public IProvideClassInfo
  301. {
  302. public:
  303. DECLAREIUNKNOWN();
  304. DECLAREIDISPATCH();
  305. //
  306. // IWHTUrlComponents
  307. //
  308. HRESULT __stdcall get_StructSize(
  309. VARIANT *Value
  310. );
  311. HRESULT __stdcall put_StructSize(
  312. VARIANT Value
  313. );
  314. HRESULT __stdcall get_Scheme(
  315. VARIANT *Value
  316. );
  317. HRESULT __stdcall put_Scheme(
  318. VARIANT Value
  319. );
  320. HRESULT __stdcall get_SchemeLength(
  321. VARIANT *Length
  322. );
  323. HRESULT __stdcall put_SchemeLength(
  324. VARIANT Length
  325. );
  326. HRESULT __stdcall get_SchemeId(
  327. VARIANT *Value
  328. );
  329. HRESULT __stdcall put_SchemeId(
  330. VARIANT Value
  331. );
  332. HRESULT __stdcall get_HostName(
  333. VARIANT *Value
  334. );
  335. HRESULT __stdcall put_HostName(
  336. VARIANT Value
  337. );
  338. HRESULT __stdcall get_HostNameLength(
  339. VARIANT *Length
  340. );
  341. HRESULT __stdcall put_HostNameLength(
  342. VARIANT Length
  343. );
  344. HRESULT __stdcall get_Port(
  345. VARIANT *Value
  346. );
  347. HRESULT __stdcall put_Port(
  348. VARIANT Value
  349. );
  350. HRESULT __stdcall get_UserName(
  351. VARIANT *Value
  352. );
  353. HRESULT __stdcall put_UserName(
  354. VARIANT Value
  355. );
  356. HRESULT __stdcall get_UserNameLength(
  357. VARIANT *Value
  358. );
  359. HRESULT __stdcall put_UserNameLength(
  360. VARIANT Value
  361. );
  362. HRESULT __stdcall get_Password(
  363. VARIANT *Value
  364. );
  365. HRESULT __stdcall put_Password(
  366. VARIANT Value
  367. );
  368. HRESULT __stdcall get_PasswordLength(
  369. VARIANT *Length
  370. );
  371. HRESULT __stdcall put_PasswordLength(
  372. VARIANT Length
  373. );
  374. HRESULT __stdcall get_UrlPath(
  375. VARIANT *Value
  376. );
  377. HRESULT __stdcall put_UrlPath(
  378. VARIANT Value
  379. );
  380. HRESULT __stdcall get_UrlPathLength(
  381. VARIANT *Length
  382. );
  383. HRESULT __stdcall put_UrlPathLength(
  384. VARIANT Length
  385. );
  386. HRESULT __stdcall get_ExtraInfo(
  387. VARIANT *Value
  388. );
  389. HRESULT __stdcall put_ExtraInfo(
  390. VARIANT Value
  391. );
  392. HRESULT __stdcall get_ExtraInfoLength(
  393. VARIANT *Length
  394. );
  395. HRESULT __stdcall put_ExtraInfoLength(
  396. VARIANT Length
  397. );
  398. DECLAREIPROVIDECLASSINFO();
  399. public:
  400. WHTUrlComponents();
  401. ~WHTUrlComponents();
  402. static HRESULT Create(MEMSETFLAG mf, IWHTUrlComponents** ppwuc);
  403. private:
  404. HRESULT _Initialize(MEMSETFLAG mf);
  405. LONG m_cRefs;
  406. ITypeInfo* m_pti;
  407. URL_COMPONENTSW m_uc;
  408. };
  409. typedef class WHTWin32ErrorCode WHTERROR;
  410. typedef class WHTWin32ErrorCode* PWHTERROR;
  411. class WHTWin32ErrorCode : public IWHTWin32ErrorCode,
  412. public IProvideClassInfo
  413. {
  414. public:
  415. DECLAREIUNKNOWN();
  416. DECLAREIDISPATCH();
  417. HRESULT __stdcall get_ErrorCode(
  418. VARIANT *ErrorCode
  419. );
  420. HRESULT __stdcall get_ErrorString(
  421. VARIANT *ErrorString
  422. );
  423. HRESULT __stdcall get_IsException(
  424. VARIANT *IsException
  425. );
  426. DECLAREIPROVIDECLASSINFO();
  427. public:
  428. WHTWin32ErrorCode(DWORD error);
  429. ~WHTWin32ErrorCode();
  430. static HRESULT Create(DWORD error, IWHTWin32ErrorCode** ppwec);
  431. private:
  432. HRESULT _Initialize(void);
  433. BOOL _IsException(int e);
  434. LONG m_cRefs;
  435. ITypeInfo* m_pti;
  436. DWORD m_error;
  437. BOOL m_bIsException;
  438. };
  439. #endif /* _COMMON_H_ */