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.
 
 
 
 
 
 

104 lines
2.5 KiB

// Gemplus (C) 1999
// Version 1.0
// Author: Sergey Ivanov
// Date of creation - 18.05.1999
// Change log:
//
#ifndef __IO_PACKET__
#define __IO_PACKET__
#include "generic.h"
// This class will manage creation and
// manipulation of driver IRPs
class CIrp;
class CMemory;
class CEvent;
class CDebug;
#pragma LOCKEDCODE
NTSTATUS onRequestComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context);
#pragma PAGEDCODE
class CIoPacket;
class CIoPacket
{
public:
NTSTATUS m_Status;
SAFE_DESTRUCTORS();
virtual VOID dispose(){self_delete();};
private:
IO_STACK_LOCATION Stack;
//Cancel;
PIRP m_Irp;
UCHAR StackSize;
CIrp* irp;
CMemory* memory;
CEvent* event;
CDebug* debug;
BOOL systemIrp;
BOOL m_DoNotFreeIrp;
// Event to signal xfer completion
KEVENT DefaultCompletionEvent;
PKEVENT CompletionEvent;
IO_STATUS_BLOCK IoStatus;
PVOID SystemBuffer;
LONG m_TimeOut;
protected:
CIoPacket(){};
virtual ~CIoPacket();
public:
CIoPacket(UCHAR StackSize);
CIoPacket(PIRP Irp);
virtual PIRP getIrpHandle(){return m_Irp;};
virtual VOID setMajorIOCtl(UCHAR controlCode);
virtual UCHAR getMajorIOCtl();
virtual VOID setMinorIOCtl(UCHAR controlCode);
virtual NTSTATUS buildStack(PDEVICE_OBJECT DeviceObject, ULONG Major=IRP_MJ_INTERNAL_DEVICE_CONTROL, UCHAR Minor=0, ULONG IoCtl=0, PVOID Context=NULL);
virtual PIO_STACK_LOCATION getStack();
virtual VOID copyStackToNext();
virtual VOID copyCurrentStackToNext();
virtual VOID setCompletion(PIO_COMPLETION_ROUTINE CompletionFunction=NULL);
virtual VOID setDefaultCompletionFunction();
virtual NTSTATUS waitForCompletion();
virtual NTSTATUS waitForCompletion(LONG TimeOut);
virtual VOID setDefaultCompletionEvent();
virtual VOID setCompletionEvent(PKEVENT CompletionEvent);
virtual VOID setStackDefaults();
virtual VOID setCurrentStack();
virtual NTSTATUS onRequestComplete();
virtual NTSTATUS copyBuffer(PUCHAR pBuffer, ULONG BufferLength);
virtual PVOID getBuffer();
virtual ULONG getReadLength();
virtual VOID setReadLength(ULONG length);
virtual ULONG getWriteLength();
virtual VOID setWriteLength(ULONG length);
virtual VOID setInformation(ULONG_PTR information);
virtual ULONG_PTR getInformation();
virtual VOID updateInformation();
virtual NTSTATUS getSystemReply(PUCHAR pReply,ULONG Length);
virtual VOID setStatus(NTSTATUS status);
virtual NTSTATUS getStatus();
virtual VOID setTimeout(LONG TimeOut);
virtual ULONG getTimeout();
};
#endif//IRP