예제 #1
0
파일: Irp.cs 프로젝트: sibaoli/Moirai
 internal IRP(IoFlowRuntime ioFlow, SafeFileHandle hPort)
 {
     this.runtime       = ioFlow;
     this.hPort         = hPort;
     Data               = new byte[SIZEOF_IRP_USER_IO_BUFFER];
     gcDataBuffer       = GCHandle.Alloc(Data, GCHandleType.Pinned);
     pDataBuffer        = (ulong)gcDataBuffer.AddrOfPinnedObject().ToInt64();
     lpMessageBuffer    = gcDataBuffer.AddrOfPinnedObject();
     hEvent             = CreateEvent(IntPtr.Zero, false, false, IntPtr.Zero);
     overlapped         = new OVERLAPPED();
     gcOVERLAPPED       = GCHandle.Alloc(overlapped, GCHandleType.Pinned);
     addrOverlapped     = gcOVERLAPPED.AddrOfPinnedObject();
     overlapped.hEvent  = hEvent;
     BackupHeaderBuffer = new byte[IOFLOW_HEADER.SIZEOF_IOFLOW_HEADER];
     ioFlowHeader       = new IOFLOW_HEADER(BackupHeaderBuffer);
 }
예제 #2
0
 internal IRP(IoFlowRuntime ioFlow, SafeFileHandle hPort)
 {
     this.runtime = ioFlow;
     this.hPort = hPort;
     Data = new byte[SIZEOF_IRP_USER_IO_BUFFER];
     gcDataBuffer = GCHandle.Alloc(Data, GCHandleType.Pinned);
     pDataBuffer = (ulong)gcDataBuffer.AddrOfPinnedObject().ToInt64();
     lpMessageBuffer = gcDataBuffer.AddrOfPinnedObject();
     hEvent = CreateEvent(IntPtr.Zero, false, false, IntPtr.Zero);
     overlapped = new OVERLAPPED();
     gcOVERLAPPED = GCHandle.Alloc(overlapped, GCHandleType.Pinned);
     addrOverlapped = gcOVERLAPPED.AddrOfPinnedObject();
     overlapped.hEvent = hEvent;
     BackupHeaderBuffer = new byte[IOFLOW_HEADER.SIZEOF_IOFLOW_HEADER];
     ioFlowHeader = new IOFLOW_HEADER(BackupHeaderBuffer);
 }