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.
|
|
//
// @struct GCK_FILE_OPEN_ITEM | Status of open file handles.
//
typedef struct tagGCK_FILE_OPEN_ITEM { BOOLEAN fReadPending; // @field TRUE if read is pending to driver
BOOLEAN fConfirmed; // @field TRUE means that the lower driver has already completed the open
ULONG ulAccess; // @field represents permissions this was opened with
USHORT usSharing; // @field represents sharing under which this was opened
FILE_OBJECT *pFileObject; // @field Pointer to file object which this status describes
struct tagGCK_FILE_OPEN_ITEM *pNextOpenItem; // @field Next structure in Linked List
} GCK_FILE_OPEN_ITEM, *PGCK_FILE_OPEN_ITEM;
typedef struct _SHARE_STATUS { ULONG OpenCount; ULONG Readers; ULONG Writers; //ULONG Deleters; //We are driver without delete symantics
ULONG SharedRead; ULONG SharedWrite; //ULONG SharedDelete; //We are driver without delete symantics
} SHARE_STATUS, *PSHARE_STATUS;
//
// @struct GCK_INTERNAL_POLL | Information needed for the iternal polling routines
//
typedef struct tagGCK_INTERNAL_POLL { KSPIN_LOCK InternalPollLock; // @field SpinLock to serialize access to this structue (not all items require it)
FILE_OBJECT *pInternalFileObject; // @field Pointer to File Object that was created for internal polls
PGCK_FILE_OPEN_ITEM pFirstOpenItem; // @field Head of linked list of GCK_FILE_OPEN_ITEMs for open files
SHARE_STATUS ShareStatus; // @field Keeps track of file sharing.
// BOOLEAN fReadPending; // @field TRUE if Read IRP to lower driver is pending
LONG fReadPending; // @field TRUE if Read IRP to lower driver is pending
PIRP pPrivateIrp; // @field IRP we reuse to send Read IRPs to lower driver
PUCHAR pucReportBuffer; // @field Buffer for getting Report with pPrivateIrp
ULONG ulInternalPollRef; // @field Reference to internal polls
PKTHREAD InternalCreateThread; // @field Used to figure out if a create is for the internal file object
BOOLEAN fReady; // @field TRUE whenever the internal polling module is good to go.
} GCK_INTERNAL_POLL, *PGCK_INTERNAL_POLL;
NTSTATUS GCK_IP_AddFileObject ( IN PGCK_FILTER_EXT pFilterExt, IN PFILE_OBJECT pFileObject );
NTSTATUS GCK_IP_RemoveFileObject ( IN PGCK_FILTER_EXT pFilterExt, IN PFILE_OBJECT pFileObject );
NTSTATUS GCK_IP_ApproveReadIrp ( IN PGCK_FILTER_EXT pFilterExt, IN PIRP );
NTSTAUTS GCK_IP_ReadApprovalComplete ( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp, IN PVOID pContext ); );
NTSTATUS GCK_IP_OneTimePoll ( IN PGCK_FILTER_EXT pFilterExt, );
NTSTATUS GCK_IP_FullTimePoll ( IN PGCK_FILTER_EXT pFilterExt, IN BOOLEAN fStart );
NTSTATUS GCK_IP_ReadComplete ( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp, IN PVOID pContext );
NTSTATUS GCK_IP_Init ( IN PGCK_FILTER_EXT pFilterExt );
NTSTATUS GCK_IP_Cleanup ( IN OUT PGCK_FILTER_EXT pFilterExt );
NTSTATUS GCK_IP_CreateFileObject ( OUT PFILE_OBJECT *ppFileObject, IN PDEVICE_OBJECT pPDO );
|