--*/
#include "classp.h"
-#include "debug.h"
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, InitializeTransferPackets)
*
* Allocate/initialize TRANSFER_PACKETs and related resources.
*/
-NTSTATUS InitializeTransferPackets(PDEVICE_OBJECT Fdo)
+NTSTATUS NTAPI InitializeTransferPackets(PDEVICE_OBJECT Fdo)
{
PCOMMON_DEVICE_EXTENSION commonExt = Fdo->DeviceExtension;
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Fdo->DeviceExtension;
while (fdoData->NumFreeTransferPackets < MIN_INITIAL_TRANSFER_PACKETS){
PTRANSFER_PACKET pkt = NewTransferPacket(Fdo);
if (pkt){
- InterlockedIncrement(&fdoData->NumTotalTransferPackets);
+ InterlockedIncrement((PLONG)&fdoData->NumTotalTransferPackets);
EnqueueFreeTransferPacket(Fdo, pkt);
}
else {
return status;
}
-
-VOID DestroyAllTransferPackets(PDEVICE_OBJECT Fdo)
+VOID NTAPI DestroyAllTransferPackets(PDEVICE_OBJECT Fdo)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Fdo->DeviceExtension;
PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
ASSERT(IsListEmpty(&fdoData->DeferredClientIrpList));
- while (pkt = DequeueFreeTransferPacket(Fdo, FALSE)){
+ while ((pkt = DequeueFreeTransferPacket(Fdo, FALSE))){
DestroyTransferPacket(pkt);
- InterlockedDecrement(&fdoData->NumTotalTransferPackets);
+ InterlockedDecrement((PLONG)&fdoData->NumTotalTransferPackets);
}
ASSERT(fdoData->NumTotalTransferPackets == 0);
}
-
-PTRANSFER_PACKET NewTransferPacket(PDEVICE_OBJECT Fdo)
+PTRANSFER_PACKET NTAPI NewTransferPacket(PDEVICE_OBJECT Fdo)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Fdo->DeviceExtension;
PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
return newPkt;
}
-
/*
* DestroyTransferPacket
*
*/
-VOID DestroyTransferPacket(PTRANSFER_PACKET Pkt)
+VOID NTAPI DestroyTransferPacket(PTRANSFER_PACKET Pkt)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Pkt->Fdo->DeviceExtension;
PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
ExFreePool(Pkt);
}
-
-VOID EnqueueFreeTransferPacket(PDEVICE_OBJECT Fdo, PTRANSFER_PACKET Pkt)
+VOID NTAPI EnqueueFreeTransferPacket(PDEVICE_OBJECT Fdo, PTRANSFER_PACKET Pkt)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Fdo->DeviceExtension;
PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
ASSERT(!Pkt->SlistEntry.Next);
InterlockedPushEntrySList(&fdoData->FreeTransferPacketsList, &Pkt->SlistEntry);
- newNumPkts = InterlockedIncrement(&fdoData->NumFreeTransferPackets);
+ newNumPkts = InterlockedIncrement((PLONG)&fdoData->NumFreeTransferPackets);
ASSERT(newNumPkts <= fdoData->NumTotalTransferPackets);
/*
pktToDelete = DequeueFreeTransferPacket(Fdo, FALSE);
if (pktToDelete){
SimplePushSlist(&pktList, &pktToDelete->SlistEntry);
- InterlockedDecrement(&fdoData->NumTotalTransferPackets);
+ InterlockedDecrement((PLONG)&fdoData->NumTotalTransferPackets);
}
else {
DBGTRACE(ClassDebugTrace, ("Extremely unlikely condition (non-fatal): %d packets dequeued at once for Fdo %p. NumTotalTransferPackets=%d (1).", MaxWorkingSetTransferPackets, Fdo, fdoData->NumTotalTransferPackets));
}
KeReleaseSpinLock(&fdoData->SpinLock, oldIrql);
- while (slistEntry = SimplePopSlist(&pktList)){
+ while ((slistEntry = SimplePopSlist(&pktList))){
pktToDelete = CONTAINING_RECORD(slistEntry, TRANSFER_PACKET, SlistEntry);
DestroyTransferPacket(pktToDelete);
}
pktToDelete = DequeueFreeTransferPacket(Fdo, FALSE);
if (pktToDelete){
- InterlockedDecrement(&fdoData->NumTotalTransferPackets);
+ InterlockedDecrement((PLONG)&fdoData->NumTotalTransferPackets);
}
else {
DBGTRACE(ClassDebugTrace, ("Extremely unlikely condition (non-fatal): %d packets dequeued at once for Fdo %p. NumTotalTransferPackets=%d (2).", MinWorkingSetTransferPackets, Fdo, fdoData->NumTotalTransferPackets));
}
-
-PTRANSFER_PACKET DequeueFreeTransferPacket(PDEVICE_OBJECT Fdo, BOOLEAN AllocIfNeeded)
+PTRANSFER_PACKET NTAPI DequeueFreeTransferPacket(PDEVICE_OBJECT Fdo, BOOLEAN AllocIfNeeded)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Fdo->DeviceExtension;
PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
PTRANSFER_PACKET pkt;
PSINGLE_LIST_ENTRY slistEntry;
- KIRQL oldIrql;
+ //KIRQL oldIrql;
slistEntry = InterlockedPopEntrySList(&fdoData->FreeTransferPacketsList);
if (slistEntry){
slistEntry->Next = NULL;
pkt = CONTAINING_RECORD(slistEntry, TRANSFER_PACKET, SlistEntry);
ASSERT(fdoData->NumFreeTransferPackets > 0);
- InterlockedDecrement(&fdoData->NumFreeTransferPackets);
+ InterlockedDecrement((PLONG)&fdoData->NumFreeTransferPackets);
}
else {
if (AllocIfNeeded){
*/
pkt = NewTransferPacket(Fdo);
if (pkt){
- InterlockedIncrement(&fdoData->NumTotalTransferPackets);
+ InterlockedIncrement((PLONG)&fdoData->NumTotalTransferPackets);
fdoData->DbgPeakNumTransferPackets = max(fdoData->DbgPeakNumTransferPackets, fdoData->NumTotalTransferPackets);
}
else {
return pkt;
}
-
-
/*
* SetupReadWriteTransferPacket
*
* The Irp is set up in SubmitTransferPacket because it must be reset
* for each packet submission.
*/
-VOID SetupReadWriteTransferPacket( PTRANSFER_PACKET Pkt,
- PVOID Buf,
- ULONG Len,
- LARGE_INTEGER DiskLocation,
- PIRP OriginalIrp)
+VOID NTAPI SetupReadWriteTransferPacket(PTRANSFER_PACKET Pkt,
+ PVOID Buf,
+ ULONG Len,
+ LARGE_INTEGER DiskLocation,
+ PIRP OriginalIrp)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Pkt->Fdo->DeviceExtension;
PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
Pkt->CompleteOriginalIrpWhenLastPacketCompletes = TRUE;
}
-
/*
* SubmitTransferPacket
*
* Set up the IRP for the TRANSFER_PACKET submission and send it down.
*/
-VOID SubmitTransferPacket(PTRANSFER_PACKET Pkt)
+VOID NTAPI SubmitTransferPacket(PTRANSFER_PACKET Pkt)
{
PCOMMON_DEVICE_EXTENSION commonExtension = Pkt->Fdo->DeviceExtension;
PDEVICE_OBJECT nextDevObj = commonExtension->LowerDeviceObject;
IoCallDriver(nextDevObj, Pkt->Irp);
}
-
-NTSTATUS TransferPktComplete(IN PDEVICE_OBJECT NullFdo, IN PIRP Irp, IN PVOID Context)
+NTSTATUS NTAPI TransferPktComplete(IN PDEVICE_OBJECT NullFdo, IN PIRP Irp, IN PVOID Context)
{
PTRANSFER_PACKET pkt = (PTRANSFER_PACKET)Context;
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = pkt->Fdo->DeviceExtension;
return STATUS_MORE_PROCESSING_REQUIRED;
}
-
/*
* SetupEjectionTransferPacket
*
* Set up a transferPacket for a synchronous Ejection Control transfer.
*/
-VOID SetupEjectionTransferPacket( TRANSFER_PACKET *Pkt,
+VOID NTAPI SetupEjectionTransferPacket( TRANSFER_PACKET *Pkt,
BOOLEAN PreventMediaRemoval,
PKEVENT SyncEventPtr,
PIRP OriginalIrp)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Pkt->Fdo->DeviceExtension;
- PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
PCDB pCdb;
PAGED_CODE();
Pkt->SyncEventPtr = SyncEventPtr;
Pkt->CompleteOriginalIrpWhenLastPacketCompletes = FALSE;
}
-
/*
* SetupModeSenseTransferPacket
*
* Set up a transferPacket for a synchronous Mode Sense transfer.
*/
-VOID SetupModeSenseTransferPacket( TRANSFER_PACKET *Pkt,
+VOID NTAPI SetupModeSenseTransferPacket(TRANSFER_PACKET *Pkt,
PKEVENT SyncEventPtr,
PVOID ModeSenseBuffer,
UCHAR ModeSenseBufferLen,
PIRP OriginalIrp)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Pkt->Fdo->DeviceExtension;
- PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
PCDB pCdb;
PAGED_CODE();
Pkt->CompleteOriginalIrpWhenLastPacketCompletes = FALSE;
}
-
/*
* SetupDriveCapacityTransferPacket
*
* Set up a transferPacket for a synchronous Drive Capacity transfer.
*/
-VOID SetupDriveCapacityTransferPacket( TRANSFER_PACKET *Pkt,
- PVOID ReadCapacityBuffer,
- ULONG ReadCapacityBufferLen,
- PKEVENT SyncEventPtr,
- PIRP OriginalIrp)
+VOID NTAPI SetupDriveCapacityTransferPacket(TRANSFER_PACKET *Pkt,
+ PVOID ReadCapacityBuffer,
+ ULONG ReadCapacityBufferLen,
+ PKEVENT SyncEventPtr,
+ PIRP OriginalIrp)
{
PFUNCTIONAL_DEVICE_EXTENSION fdoExt = Pkt->Fdo->DeviceExtension;
- PCLASS_PRIVATE_FDO_DATA fdoData = fdoExt->PrivateFdoData;
PCDB pCdb;
RtlZeroMemory(&Pkt->Srb, sizeof(SCSI_REQUEST_BLOCK));
Pkt->CompleteOriginalIrpWhenLastPacketCompletes = FALSE;
}
-
#if 0
/*
* SetupSendStartUnitTransferPacket
Pkt->CompleteOriginalIrpWhenLastPacketCompletes = FALSE;
}
#endif
-
-