/*++

Copyright (C) Microsoft Corporation, 1996 - 1999

Module Name:

    smcnt.h

Abstract:

    This files inlcudes the Windows NT specific data structure
    for the smart card library

Environment:

    Kernel mode only.

Notes:

Revision History:

    - Created December 1996 by Klaus Schutz 

--*/

#define SMCLIB_NT 1

typedef struct _OS_DEP_DATA {

	// Pointer to the device object (Must be set by driver)
	PDEVICE_OBJECT DeviceObject;

    //
	// This is the current Irp to be processed
    // Use OsData->SpinLock to access this member
    //
	PIRP CurrentIrp;

    //
    // Irp to be notified of card insertion/removal 
    // Use OsData->SpinLock to access this member
    //
    PIRP NotificationIrp;

    // Used to synchronize access to the driver 
    KMUTANT Mutex;

    // Use this spin lock to access protected members (see smclib.h)
    KSPIN_LOCK SpinLock;

    struct {
     	
        BOOLEAN Removed;
        LONG RefCount;
        KEVENT RemoveEvent;
		LIST_ENTRY TagList;
    } RemoveLock;

#ifdef DEBUG_INTERFACE
    PDEVICE_OBJECT DebugDeviceObject;
#endif

} OS_DEP_DATA, *POS_DEP_DATA;

#ifdef  POOL_TAGGING
#ifndef ExAllocatePool
#error  ExAllocatePool not defined
#endif
#undef  ExAllocatePool
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b, SMARTCARD_POOL_TAG) 
#endif