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.

409 lines
11 KiB

  1. /*
  2. * olevalid.c - OLE validation functions module.
  3. */
  4. /* Headers
  5. **********/
  6. #include "project.h"
  7. #pragma hdrstop
  8. /****************************** Public Functions *****************************/
  9. #if defined(DEBUG) || defined(VSTF)
  10. /*
  11. ** IsValidPCGUID()
  12. **
  13. **
  14. **
  15. ** Arguments:
  16. **
  17. ** Returns:
  18. **
  19. ** Side Effects: none
  20. */
  21. PUBLIC_CODE BOOL IsValidPCGUID(PCGUID pcguid)
  22. {
  23. /* All values are valid GUIDs. */
  24. return(IS_VALID_READ_PTR(pcguid, CGUID));
  25. }
  26. /*
  27. ** IsValidPCCLSID()
  28. **
  29. **
  30. **
  31. ** Arguments:
  32. **
  33. ** Returns:
  34. **
  35. ** Side Effects: none
  36. */
  37. PUBLIC_CODE BOOL IsValidPCCLSID(PCCLSID pcclsid)
  38. {
  39. return(IS_VALID_STRUCT_PTR(pcclsid, CGUID));
  40. }
  41. /*
  42. ** IsValidPCIID()
  43. **
  44. **
  45. **
  46. ** Arguments:
  47. **
  48. ** Returns:
  49. **
  50. ** Side Effects: none
  51. */
  52. PUBLIC_CODE BOOL IsValidPCIID(PCIID pciid)
  53. {
  54. return(IS_VALID_STRUCT_PTR(pciid, CGUID));
  55. }
  56. /*
  57. ** IsValidREFIID()
  58. **
  59. **
  60. **
  61. ** Arguments:
  62. **
  63. ** Returns:
  64. **
  65. ** Side Effects: none
  66. */
  67. PUBLIC_CODE BOOL IsValidREFIID(REFIID riid)
  68. {
  69. return(IS_VALID_STRUCT_PTR(riid, CIID));
  70. }
  71. /*
  72. ** IsValidREFCLSID()
  73. **
  74. **
  75. **
  76. ** Arguments:
  77. **
  78. ** Returns:
  79. **
  80. ** Side Effects: none
  81. */
  82. PUBLIC_CODE BOOL IsValidREFCLSID(REFCLSID rclsid)
  83. {
  84. return(IS_VALID_STRUCT_PTR(rclsid, CCLSID));
  85. }
  86. /*
  87. ** IsValidPCInterface()
  88. **
  89. **
  90. **
  91. ** Arguments:
  92. **
  93. ** Returns:
  94. **
  95. ** Side Effects: none
  96. */
  97. PUBLIC_CODE BOOL IsValidPCInterface(PCVOID pcvi)
  98. {
  99. return(IS_VALID_READ_PTR((PROC *)pcvi, PROC) &&
  100. IS_VALID_CODE_PTR(*((PROC *)pcvi), Method));
  101. }
  102. /*
  103. ** IsValidPCIClassFactory()
  104. **
  105. **
  106. **
  107. ** Arguments:
  108. **
  109. ** Returns:
  110. **
  111. ** Side Effects: none
  112. */
  113. PUBLIC_CODE BOOL IsValidPCIClassFactory(PCIClassFactory pcicf)
  114. {
  115. return(IS_VALID_READ_PTR(pcicf, CIClassFactory) &&
  116. IS_VALID_READ_PTR(pcicf->lpVtbl, sizeof(*(pcicf->lpVtbl))) &&
  117. IS_VALID_STRUCT_PTR((PCIUnknown)pcicf, CIUnknown) &&
  118. IS_VALID_CODE_PTR(pcicf->lpVtbl->CreateInstance, CreateInstance) &&
  119. IS_VALID_CODE_PTR(pcicf->lpVtbl->LockServer, LockServer));
  120. }
  121. /*
  122. ** IsValidPCIDataObject()
  123. **
  124. **
  125. **
  126. ** Arguments:
  127. **
  128. ** Returns:
  129. **
  130. ** Side Effects: none
  131. */
  132. PUBLIC_CODE BOOL IsValidPCIDataObject(PCIDataObject pcido)
  133. {
  134. return(IS_VALID_READ_PTR(pcido, CIDataObject) &&
  135. IS_VALID_READ_PTR(pcido->lpVtbl, sizeof(*(pcido->lpVtbl))) &&
  136. IS_VALID_STRUCT_PTR((PCIUnknown)pcido, CIUnknown) &&
  137. IS_VALID_CODE_PTR(pcido->lpVtbl->GetData, GetData) &&
  138. IS_VALID_CODE_PTR(pcido->lpVtbl->GetDataHere, GetDataHere) &&
  139. IS_VALID_CODE_PTR(pcido->lpVtbl->QueryGetData, QueryGetData) &&
  140. IS_VALID_CODE_PTR(pcido->lpVtbl->GetCanonicalFormatEtc, GetCanonicalFormatEtc) &&
  141. IS_VALID_CODE_PTR(pcido->lpVtbl->SetData, SetData) &&
  142. IS_VALID_CODE_PTR(pcido->lpVtbl->EnumFormatEtc, EnumFormatEtc) &&
  143. IS_VALID_CODE_PTR(pcido->lpVtbl->DAdvise, DAdvise) &&
  144. IS_VALID_CODE_PTR(pcido->lpVtbl->DUnadvise, DUnadvise) &&
  145. IS_VALID_CODE_PTR(pcido->lpVtbl->EnumDAdvise, EnumDAdvise));
  146. }
  147. /*
  148. ** IsValidPCIMalloc()
  149. **
  150. **
  151. **
  152. ** Arguments:
  153. **
  154. ** Returns:
  155. **
  156. ** Side Effects: none
  157. */
  158. PUBLIC_CODE BOOL IsValidPCIMalloc(PCIMalloc pcimalloc)
  159. {
  160. return(IS_VALID_READ_PTR(pcimalloc, CIMalloc) &&
  161. IS_VALID_READ_PTR(pcimalloc->lpVtbl, sizeof(*(pcimalloc->lpVtbl))) &&
  162. IS_VALID_STRUCT_PTR((PCIUnknown)pcimalloc, CIUnknown) &&
  163. IS_VALID_CODE_PTR(pcimalloc->lpVtbl->Alloc, Alloc) &&
  164. IS_VALID_CODE_PTR(pcimalloc->lpVtbl->Realloc, Realloc) &&
  165. IS_VALID_CODE_PTR(pcimalloc->lpVtbl->Free, Free) &&
  166. IS_VALID_CODE_PTR(pcimalloc->lpVtbl->GetSize, GetSize) &&
  167. IS_VALID_CODE_PTR(pcimalloc->lpVtbl->DidAlloc, DidAlloc) &&
  168. IS_VALID_CODE_PTR(pcimalloc->lpVtbl->HeapMinimize, HeapMinimize));
  169. }
  170. /*
  171. ** IsValidPCIMoniker()
  172. **
  173. **
  174. **
  175. ** Arguments:
  176. **
  177. ** Returns:
  178. **
  179. ** Side Effects: none
  180. */
  181. PUBLIC_CODE BOOL IsValidPCIMoniker(PCIMoniker pcimk)
  182. {
  183. return(IS_VALID_READ_PTR(pcimk, CIMoniker) &&
  184. IS_VALID_READ_PTR(pcimk->lpVtbl, sizeof(*(pcimk->lpVtbl))) &&
  185. IS_VALID_STRUCT_PTR((PCIPersistStream)pcimk, CIPersistStream) &&
  186. IS_VALID_CODE_PTR(pcimk->lpVtbl->BindToObject, BindToObject) &&
  187. IS_VALID_CODE_PTR(pcimk->lpVtbl->BindToStorage, BindToStorage) &&
  188. IS_VALID_CODE_PTR(pcimk->lpVtbl->Reduce, Reduce) &&
  189. IS_VALID_CODE_PTR(pcimk->lpVtbl->ComposeWith, ComposeWith) &&
  190. IS_VALID_CODE_PTR(pcimk->lpVtbl->Enum, Enum) &&
  191. IS_VALID_CODE_PTR(pcimk->lpVtbl->IsEqual, IsEqual) &&
  192. IS_VALID_CODE_PTR(pcimk->lpVtbl->Hash, Hash) &&
  193. IS_VALID_CODE_PTR(pcimk->lpVtbl->IsRunning, IsRunning) &&
  194. IS_VALID_CODE_PTR(pcimk->lpVtbl->GetTimeOfLastChange, GetTimeOfLastChange) &&
  195. IS_VALID_CODE_PTR(pcimk->lpVtbl->Inverse, Inverse) &&
  196. IS_VALID_CODE_PTR(pcimk->lpVtbl->CommonPrefixWith, CommonPrefixWith) &&
  197. IS_VALID_CODE_PTR(pcimk->lpVtbl->RelativePathTo, RelativePathTo) &&
  198. IS_VALID_CODE_PTR(pcimk->lpVtbl->GetDisplayName, GetDisplayName) &&
  199. IS_VALID_CODE_PTR(pcimk->lpVtbl->ParseDisplayName, ParseDisplayName) &&
  200. IS_VALID_CODE_PTR(pcimk->lpVtbl->IsSystemMoniker, IsSystemMoniker));
  201. }
  202. /*
  203. ** IsValidPCIPersist()
  204. **
  205. **
  206. **
  207. ** Arguments:
  208. **
  209. ** Returns:
  210. **
  211. ** Side Effects: none
  212. */
  213. PUBLIC_CODE BOOL IsValidPCIPersist(PCIPersist pcip)
  214. {
  215. return(IS_VALID_READ_PTR(pcip, CIUnknown) &&
  216. IS_VALID_READ_PTR(pcip->lpVtbl, sizeof(*(pcip->lpVtbl))) &&
  217. IS_VALID_STRUCT_PTR((PCIUnknown)pcip, CIUnknown) &&
  218. IS_VALID_CODE_PTR(pcip->lpVtbl->GetClassID, GetClassID));
  219. }
  220. /*
  221. ** IsValidPCIPersistFile()
  222. **
  223. **
  224. **
  225. ** Arguments:
  226. **
  227. ** Returns:
  228. **
  229. ** Side Effects: none
  230. */
  231. PUBLIC_CODE BOOL IsValidPCIPersistFile(PCIPersistFile pcipfile)
  232. {
  233. return(IS_VALID_READ_PTR(pcipfile, CIPersistFile) &&
  234. IS_VALID_READ_PTR(pcipfile->lpVtbl, sizeof(*(pcipfile->lpVtbl))) &&
  235. IS_VALID_STRUCT_PTR((PCIPersist)pcipfile, CIPersist) &&
  236. IS_VALID_CODE_PTR(pcipfile->lpVtbl->IsDirty, IsDirty) &&
  237. IS_VALID_CODE_PTR(pcipfile->lpVtbl->Load, Load) &&
  238. IS_VALID_CODE_PTR(pcipfile->lpVtbl->Save, Save) &&
  239. IS_VALID_CODE_PTR(pcipfile->lpVtbl->SaveCompleted, SaveCompleted) &&
  240. IS_VALID_CODE_PTR(pcipfile->lpVtbl->GetCurFile, GetCurFile));
  241. }
  242. /*
  243. ** IsValidPCIPersistStorage()
  244. **
  245. **
  246. **
  247. ** Arguments:
  248. **
  249. ** Returns:
  250. **
  251. ** Side Effects: none
  252. */
  253. PUBLIC_CODE BOOL IsValidPCIPersistStorage(PCIPersistStorage pcipstg)
  254. {
  255. return(IS_VALID_READ_PTR(pcipstg, CIPersistStorage) &&
  256. IS_VALID_READ_PTR(pcipstg->lpVtbl, sizeof(*(pcipstg->lpVtbl))) &&
  257. IS_VALID_STRUCT_PTR((PCIPersist)pcipstg, CIPersist) &&
  258. IS_VALID_CODE_PTR(pcipstg->lpVtbl->IsDirty, IsDirty) &&
  259. IS_VALID_CODE_PTR(pcipstg->lpVtbl->InitNew, InitNew) &&
  260. IS_VALID_CODE_PTR(pcipstg->lpVtbl->Load, Load) &&
  261. IS_VALID_CODE_PTR(pcipstg->lpVtbl->Save, Save) &&
  262. IS_VALID_CODE_PTR(pcipstg->lpVtbl->SaveCompleted, SaveCompleted) &&
  263. IS_VALID_CODE_PTR(pcipstg->lpVtbl->HandsOffStorage, HandsOffStorage));
  264. }
  265. /*
  266. ** IsValidPCIPersistStream()
  267. **
  268. **
  269. **
  270. ** Arguments:
  271. **
  272. ** Returns:
  273. **
  274. ** Side Effects: none
  275. */
  276. PUBLIC_CODE BOOL IsValidPCIPersistStream(PCIPersistStream pcipstr)
  277. {
  278. return(IS_VALID_READ_PTR(pcipstr, CIPersistStream) &&
  279. IS_VALID_READ_PTR(pcipstr->lpVtbl, sizeof(*(pcipstr->lpVtbl))) &&
  280. IS_VALID_STRUCT_PTR((PCIPersist)pcipstr, CIPersist) &&
  281. IS_VALID_CODE_PTR(pcipstr->lpVtbl->IsDirty, IsDirty) &&
  282. IS_VALID_CODE_PTR(pcipstr->lpVtbl->Load, Load) &&
  283. IS_VALID_CODE_PTR(pcipstr->lpVtbl->Save, Save) &&
  284. IS_VALID_CODE_PTR(pcipstr->lpVtbl->GetSizeMax, GetSizeMax));
  285. }
  286. /*
  287. ** IsValidPCIStorage()
  288. **
  289. **
  290. **
  291. ** Arguments:
  292. **
  293. ** Returns:
  294. **
  295. ** Side Effects: none
  296. */
  297. PUBLIC_CODE BOOL IsValidPCIStorage(PCIStorage pcistg)
  298. {
  299. return(IS_VALID_READ_PTR(pcistg, CIStorage) &&
  300. IS_VALID_READ_PTR(pcistg->lpVtbl, sizeof(*(pcistg->lpVtbl))) &&
  301. IS_VALID_STRUCT_PTR((PCIUnknown)pcistg, CIUnknown) &&
  302. IS_VALID_CODE_PTR(pcistg->lpVtbl->CreateStream, CreateStream) &&
  303. IS_VALID_CODE_PTR(pcistg->lpVtbl->OpenStream, OpenStream) &&
  304. IS_VALID_CODE_PTR(pcistg->lpVtbl->CreateStorage, CreateStorage) &&
  305. IS_VALID_CODE_PTR(pcistg->lpVtbl->OpenStorage, OpenStorage) &&
  306. IS_VALID_CODE_PTR(pcistg->lpVtbl->CopyTo, CopyTo) &&
  307. IS_VALID_CODE_PTR(pcistg->lpVtbl->MoveElementTo, MoveElementTo) &&
  308. IS_VALID_CODE_PTR(pcistg->lpVtbl->Commit, Commit) &&
  309. IS_VALID_CODE_PTR(pcistg->lpVtbl->Revert, Revert) &&
  310. IS_VALID_CODE_PTR(pcistg->lpVtbl->EnumElements, EnumElements) &&
  311. IS_VALID_CODE_PTR(pcistg->lpVtbl->DestroyElement, DestroyElement) &&
  312. IS_VALID_CODE_PTR(pcistg->lpVtbl->RenameElement, RenameElement) &&
  313. IS_VALID_CODE_PTR(pcistg->lpVtbl->SetElementTimes, SetElementTimes) &&
  314. IS_VALID_CODE_PTR(pcistg->lpVtbl->SetClass, SetClass) &&
  315. IS_VALID_CODE_PTR(pcistg->lpVtbl->SetStateBits, SetStateBits) &&
  316. IS_VALID_CODE_PTR(pcistg->lpVtbl->Stat, Stat));
  317. }
  318. /*
  319. ** IsValidPCIStream()
  320. **
  321. **
  322. **
  323. ** Arguments:
  324. **
  325. ** Returns:
  326. **
  327. ** Side Effects: none
  328. */
  329. PUBLIC_CODE BOOL IsValidPCIStream(PCIStream pcistr)
  330. {
  331. return(IS_VALID_READ_PTR(pcistr, CIStorage) &&
  332. IS_VALID_READ_PTR(pcistr->lpVtbl, sizeof(*(pcistr->lpVtbl))) &&
  333. IS_VALID_STRUCT_PTR((PCIUnknown)pcistr, CIUnknown) &&
  334. IS_VALID_CODE_PTR(pcistr->lpVtbl->Read, Read) &&
  335. IS_VALID_CODE_PTR(pcistr->lpVtbl->Write, Write) &&
  336. IS_VALID_CODE_PTR(pcistr->lpVtbl->Seek, Seek) &&
  337. IS_VALID_CODE_PTR(pcistr->lpVtbl->SetSize, SetSize) &&
  338. IS_VALID_CODE_PTR(pcistr->lpVtbl->CopyTo, CopyTo) &&
  339. IS_VALID_CODE_PTR(pcistr->lpVtbl->Commit, Commit) &&
  340. IS_VALID_CODE_PTR(pcistr->lpVtbl->Revert, Revert) &&
  341. IS_VALID_CODE_PTR(pcistr->lpVtbl->LockRegion, LockRegion) &&
  342. IS_VALID_CODE_PTR(pcistr->lpVtbl->UnlockRegion, UnlockRegion) &&
  343. IS_VALID_CODE_PTR(pcistr->lpVtbl->Stat, Stat) &&
  344. IS_VALID_CODE_PTR(pcistr->lpVtbl->Clone, Clone));
  345. }
  346. /*
  347. ** IsValidPCIUnknown()
  348. **
  349. **
  350. **
  351. ** Arguments:
  352. **
  353. ** Returns:
  354. **
  355. ** Side Effects: none
  356. */
  357. PUBLIC_CODE BOOL IsValidPCIUnknown(PCIUnknown pciunk)
  358. {
  359. return(IS_VALID_READ_PTR(pciunk, CIUnknown) &&
  360. IS_VALID_READ_PTR(pciunk->lpVtbl, sizeof(*(pciunk->lpVtbl))) &&
  361. IS_VALID_CODE_PTR(pciunk->lpVtbl->QueryInterface, QueryInterface) &&
  362. IS_VALID_CODE_PTR(pciunk->lpVtbl->AddRef, AddRef) &&
  363. IS_VALID_CODE_PTR(pciunk->lpVtbl->Release, Release));
  364. }
  365. #endif