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
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
|