@George King
 
	here,
 
	psuedocode will need reworking to be functional though.
 
NTSTATUS
IoSynchronousCallDriver_k8 (
    PDEVICE_OBJECT DeviceObject,
    PIRP Irp )
{
    unsigned int local_0x18; // [esp-24]
    unsigned char local_0x14[20]; // [esp-20]
    unsigned long v1; // eax
    local_0x18 = (unsigned char)&local_0x18 & 0xFFFFFF00;
    local_0x14[0] = 0;
    local_0x18 = 1024;
    local_0x14[8] = &local_0x18[2];
    local_0x14[4] = &local_0x18[2];
    *(*(Irp + 96) + 4294967292) = &local_0x18;
    *(*(Irp + 96) + 4294967288) = &CmpCompleteFlushAndPurgeIrp;
    *(*(Irp + 96) + 4294967263) = 224;
    v1 = IofCallDriver( DeviceObject, Irp );
    if( v1 == 259 ) {
        KeWaitForSingleObject( &local_0x18, 5, 0, 0, 0 );
        v1 = *(Irp + 24);
	}
    return v1;
}