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.

110 lines
2.9 KiB

  1. //+--------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1996 - 1999
  5. //
  6. // File: view.h
  7. //
  8. // Contents: Cert Server Database interface implementation
  9. //
  10. //---------------------------------------------------------------------------
  11. #include "resource.h" // main symbols
  12. // defines for multi-thread handling
  13. typedef enum
  14. {
  15. ENUMTHREAD_OPEN = 0,
  16. ENUMTHREAD_NEXT,
  17. ENUMTHREAD_CLEANUP,
  18. ENUMTHREAD_END
  19. } ENUMTHREADCALLS;
  20. class CEnumCERTDBRESULTROW: public IEnumCERTDBRESULTROW
  21. {
  22. public:
  23. CEnumCERTDBRESULTROW(BOOL fThreading = TRUE);
  24. ~CEnumCERTDBRESULTROW();
  25. // IUnknown
  26. STDMETHODIMP QueryInterface(const IID& iid, void **ppv);
  27. ULONG STDMETHODCALLTYPE AddRef();
  28. ULONG STDMETHODCALLTYPE Release();
  29. // IEnumCERTDBRESULTROW
  30. STDMETHOD(Next)(
  31. /* [in] */ ICertDBComputedColumn *pIComputedColumn,
  32. /* [in] */ ULONG celt,
  33. /* [out] */ CERTDBRESULTROW *rgelt,
  34. /* [out] */ ULONG *pceltFetched);
  35. STDMETHOD(ReleaseResultRow)(
  36. /* [in] */ ULONG celt,
  37. /* [in, out] */ CERTDBRESULTROW *rgelt);
  38. STDMETHOD(Skip)(
  39. /* [in] */ LONG celt,
  40. /* [out] */ LONG *pielt);
  41. STDMETHOD(Reset)(VOID);
  42. STDMETHOD(Clone)(
  43. /* [out] */ IEnumCERTDBRESULTROW **ppenum);
  44. // CEnumCERTDBRESULTROW
  45. HRESULT Open(
  46. IN CERTSESSION *pcs,
  47. IN ICertDB *pdb,
  48. IN DWORD ccvr,
  49. IN CERTVIEWRESTRICTION const *acvr,
  50. IN DWORD ccolOut,
  51. IN DWORD const *acolOut);
  52. private:
  53. VOID _Cleanup();
  54. HRESULT _SetTable(
  55. IN LONG ColumnIndex,
  56. OUT LONG *pColumnIndexDefault);
  57. HRESULT _SaveRestrictions(
  58. IN DWORD ccvrIn,
  59. IN CERTVIEWRESTRICTION const *acvrIn,
  60. IN LONG ColumnIndexDefault);
  61. // multi-thread handling
  62. static DWORD WINAPI _ViewWorkThreadFunctionHelper(LPVOID lp);
  63. HRESULT _HandleThreadError();
  64. HRESULT _ThreadOpen(DWORD dwCallerThreadID);
  65. HRESULT _ThreadNext(DWORD dwCallerThreadID);
  66. VOID _ThreadCleanup(DWORD dwCallerThreadID);
  67. DWORD _ViewWorkThreadFunction(VOID);
  68. ICertDB *m_pdb;
  69. CERTSESSION *m_pcs;
  70. CERTVIEWRESTRICTION *m_aRestriction;
  71. DWORD m_cRestriction;
  72. DWORD m_ccolOut;
  73. DWORD *m_acolOut;
  74. BOOL m_fNoMoreData;
  75. LONG m_ieltMax;
  76. LONG m_ielt;
  77. LONG m_cskip;
  78. // thread stuff
  79. HANDLE m_hWorkThread;
  80. HANDLE m_hViewEvent;
  81. HANDLE m_hReturnEvent;
  82. HRESULT m_hrThread;
  83. ENUMTHREADCALLS m_enumViewCall;
  84. VOID *m_pThreadParam;
  85. BOOL m_fThreading;
  86. //#if DBG_CERTSRV
  87. DWORD m_dwCallerThreadId;
  88. //#endif
  89. // Reference count
  90. long m_cRef;
  91. };