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.

108 lines
3.0 KiB

  1. /*==========================================================================
  2. *
  3. * Copyright (C) 2000 Microsoft Corporation. All Rights Reserved.
  4. *
  5. * File: CallbackThread.h
  6. * Content: Callback Thread Object Header File
  7. *@@BEGIN_MSINTERNAL
  8. * History:
  9. * Date By Reason
  10. * ==== == ======
  11. * 02/05/01 mjn Created
  12. *@@END_MSINTERNAL
  13. *
  14. ***************************************************************************/
  15. #ifndef __CALLBACK_THREAD_H__
  16. #define __CALLBACK_THREAD_H__
  17. #undef DPF_SUBCOMP
  18. #define DPF_SUBCOMP DN_SUBCOMP_CORE
  19. //**********************************************************************
  20. // Constant definitions
  21. //**********************************************************************
  22. //**********************************************************************
  23. // Macro definitions
  24. //**********************************************************************
  25. #define CONTAINING_CALLBACKTHREAD(pBilink) (CCallbackThread*) (((BYTE*) pBilink) - (BYTE*) (((CCallbackThread*) ((DWORD_PTR) (0x00000000)))->GetCallbackThreadsBilink()))
  26. //**********************************************************************
  27. // Structure definitions
  28. //**********************************************************************
  29. class CCallbackThread;
  30. typedef struct _DIRECTNETOBJECT DIRECTNETOBJECT;
  31. //**********************************************************************
  32. // Variable definitions
  33. //**********************************************************************
  34. //**********************************************************************
  35. // Function prototypes
  36. //**********************************************************************
  37. //**********************************************************************
  38. // Class prototypes
  39. //**********************************************************************
  40. // class for Callback Thread objects
  41. class CCallbackThread
  42. {
  43. public:
  44. void Initialize( void )
  45. {
  46. m_Sig[0] = 'C';
  47. m_Sig[1] = 'A';
  48. m_Sig[2] = 'L';
  49. m_Sig[3] = 'L';
  50. GetCallbackThreadsBilink()->Initialize();
  51. m_dwThreadID = GetCurrentThreadId();
  52. };
  53. #undef DPF_MODNAME
  54. #define DPF_MODNAME "CCallbackThread::Deinitialize"
  55. void Deinitialize( void )
  56. {
  57. DNASSERT( GetCallbackThreadsBilink()->IsEmpty() );
  58. };
  59. #undef DPF_MODNAME
  60. #define DPF_MODNAME "CCallbackThread::IsCurrentThread"
  61. BOOL IsCurrentThread( void )
  62. {
  63. if ( GetCurrentThreadId() == m_dwThreadID )
  64. {
  65. return( TRUE );
  66. }
  67. return( FALSE );
  68. };
  69. #undef DPF_MODNAME
  70. #define DPF_MODNAME "CCallbackThread::GetCallbackThreadsBilink"
  71. CBilink * GetCallbackThreadsBilink( void )
  72. {
  73. DBG_CASSERT(sizeof(m_CallbackThreadsBilink) == sizeof(CBilink));
  74. return( (CBilink*) (&m_CallbackThreadsBilink) );
  75. };
  76. private:
  77. BYTE m_Sig[4]; // Signature
  78. DWORD m_dwThreadID;
  79. struct
  80. {
  81. CBilink *m_pNext;
  82. CBilink *m_pPrev;
  83. } m_CallbackThreadsBilink;
  84. };
  85. #undef DPF_MODNAME
  86. #endif // __CALLBACK_THREAD_H__