olevalid.c
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 11k
Category:

Windows Kernel

Development Platform:

Visual C++

  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