Source code of Windows XP (NT5)
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.
|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1997.
//
// File: regevent.hxx
//
// Contents: Classes for tracking registry changes
//
// Classes: CRegNotifyKey
// CRegChangeEvent
// CRegNotify
//
// History: 04-Jul-94 DwightKr Created
//
//--------------------------------------------------------------------------
#pragma once
//+-------------------------------------------------------------------------
//
// Class: CRegNotifyKey
//
// Purpose: An encapsulation of a registry key name
//
// History: 07-Jun-94 DwightKr Created
//
//--------------------------------------------------------------------------
class CRegNotifyKey {
public:
CRegNotifyKey( const WCHAR * wcsRegKey );
protected:
//
// Name of key.
//
WCHAR _wcsKey[MAX_PATH]; UNICODE_STRING _KeyName; OBJECT_ATTRIBUTES _ObjectAttr;
};
//+-------------------------------------------------------------------------
//
// Class: CRegChangeEvent
//
// Purpose: Sets up basic functionality of waiting on a registry change event
//
// History: 07-Jun-94 DwightKr Created
//
//--------------------------------------------------------------------------
class CRegChangeEvent : public CRegNotifyKey { public:
CRegChangeEvent( const WCHAR * wcsRegKey, BOOL fDeferInit = FALSE ); ~CRegChangeEvent();
const HANDLE GetEventHandle() const { return _regEvent.GetHandle(); } const WCHAR * GetKeyName() const { return _wcsKey; }
void Reset(); void Register(); void Init();
private:
HANDLE _hKey; IO_STATUS_BLOCK _IoStatus; CEventSem _regEvent; BOOL _fDeferInit; BOOL _fNotifyEnabled; };
//+-------------------------------------------------------------------------
//
// Class: CRegNotify
//
// Purpose: APC based version of CRegChangeEvent
//
// History: 20-Feb-96 KyleP Created
// 16 Dec 97 AlanW Fixed race in Register/DisableNotification
//
//--------------------------------------------------------------------------
class CRegNotify : public CRegNotifyKey {
public:
CRegNotify( const WCHAR * wcsRegKey );
void DisableNotification();
virtual void DoIt() = 0;
protected:
virtual ~CRegNotify();
private:
//
// Refcounting
//
void AddRef(); void Release();
void Register();
static void WINAPI APC( void * ApcContext, IO_STATUS_BLOCK * IoStatusBlock, ULONG Reserved );
//
// this is necessary so that if shutdown is called while processing an APC
// just before re-registering, DisableNotification to forbid Register from
// re-opening the key.
//
BOOL _fShutdown;
long _refCount; HANDLE _hKey; IO_STATUS_BLOCK _IoStatus;
CMutexSem _mtx; };
|