www.pudn.com > truecrypt.zip > NTRAWDV.C


/* Copyright (C) 2004 TrueCrypt Team, truecrypt.org 
   This product uses components written by Paul Le Roux  */ 
 
#include "TCdefs.h" 
#include "crypto.h" 
#include "fat.h" 
#include "volumes.h" 
 
#include "apidrvr.h" 
#include "ntdriver.h" 
#include "ntvol.h" 
#include "ntrawdv.h" 
 
#pragma warning( disable : 4127 ) 
 
NTSTATUS 
TCSendIRP_RawDevice (PDEVICE_OBJECT DeviceObject, 
		      PEXTENSION Extension, 
		      PVOID pUserBuffer, 
		      ULONG uFlags, 
		      UCHAR uMajorFunction, 
		      PIRP Irp) 
{ 
	PIO_STACK_LOCATION irpSp; 
	PIO_STACK_LOCATION irpNextSp; 
	NTSTATUS ntStatus; 
 
	if (uFlags);		/* Remove compiler warning */ 
 
//	Dump ("Sending IRP...\n"); 
 
	irpSp = IoGetCurrentIrpStackLocation (Irp); 
	irpNextSp = IoGetNextIrpStackLocation (Irp); 
 
	irpSp->MajorFunction = uMajorFunction; 
	irpSp->DeviceObject = DeviceObject; 
	irpSp->FileObject = Extension->pfoDeviceFile; 
 
	/* Copy our flags down one level, this is to get the proper 
	   removable-media handling */ 
	irpNextSp->Flags = irpSp->Flags; 
 
	/* Setup the lower drivers stack location */ 
	irpNextSp->MajorFunction = irpSp->MajorFunction; 
	irpNextSp->MinorFunction = irpSp->MinorFunction; 
	irpNextSp->DeviceObject = irpSp->DeviceObject; 
	irpNextSp->FileObject = irpSp->FileObject; 
	/* Copy over io parameters, this is a union, so it handles 
	   deviceiocontrol & read/write */ 
	irpNextSp->Parameters.Read.Length = irpSp->Parameters.Read.Length; 
	irpNextSp->Parameters.Read.ByteOffset = irpSp->Parameters.Read.ByteOffset; 
	irpNextSp->Parameters.Read.Key = irpSp->Parameters.Read.Key; 
 
	IoSetCompletionRoutine (Irp, TCCompletion, pUserBuffer, TRUE, TRUE, TRUE); 
	ntStatus = IoCallDriver (Extension->pFsdDevice, Irp); 
 
//	Dump ("IRP Sent!\n"); 
	return ntStatus; 
}