IoAdjustStackSizeForRedirection
NTSTATUS __stdcall IoAdjustStackSizeForRedirection(
_DEVICE_OBJECT *SourceDevice,
_DEVICE_OBJECT *TargetDevice,
CHAR *ExtraStackLocations){
NTSTATUS v4;
UINT8 v7;
char StackSize;
UINT8 v9;
char v10;
CHAR v11;
_DEVICE_OBJECT *v12;
_DEVICE_OBJECT *AttachedTo;
v4 = 0;
v7 = KeAcquireQueuedSpinLock(10i64, (INT64)TargetDevice, (INT64)ExtraStackLocations);
StackSize = SourceDevice->StackSize;
v9 = v7;
v10 = TargetDevice->StackSize;
if( StackSize < v10 )
{
v11 = v10 - StackSize;
LODWORD(v12) = IoGetAttachedDevice((INT64)SourceDevice);
AttachedTo = v12;
if( (unsigned __int16)v11 + (unsigned int)(unsigned __int16)v12->StackSize < 0x7D )
{
if( v12 != SourceDevice )
{
do
{
AttachedTo->StackSize += v11;
AttachedTo = AttachedTo->DeviceObjectExtension->AttachedTo;
}
while( AttachedTo != SourceDevice );
StackSize = SourceDevice->StackSize;
}
SourceDevice->StackSize = v11 + StackSize;
}
else
{
v4 = -1073741811;
}
}
else
{
v11 = 0;
}
KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, v9);
if( v4 >= 0 && ExtraStackLocations )
*ExtraStackLocations = v11;
return v4;
}Referenced by:
No references.