GlobalDeclarations
{

type IrqlType = int;

var irql_current: IrqlType;

procedure {:allocator "full"} {:AngelicUnknown} unknown_irql() returns (r:IrqlType);
  ensures 0 <= r && r <= 31;

var mutexToIrqlMap: [int]int;
var mutexTmp: int;

var spinlockToIrqlMap: [int]int;
var spinlockTmp: int;

var readWritelockToIrqlMap: [int]int;
var readWritelockTmp: int;

procedure MakeChoice() returns (r: int);
var choice: int;

var driverControlTmp: int;
var ioCompletionTmp: int;
var wdfInterruptTmp: int;
var wdfSpinlockTmp: int;

}

ProcedureRule
{
	procedure {:#ReplaceImplementation} BCryptCloseAlgorithmProvider({:pointer} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375377(v=vs.85).aspx
	assert {:name "BCryptCloseAlgorithmProvider"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 5} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 5} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} BCryptCreateHash({:pointer} x0: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x1: int, {:pointer} x2: int, {:scalar} x3: int, {:pointer} {:ref "Mem_T.VOID"} x4: int, {:scalar} x5: int, {:scalar} x6: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375383(v=vs.85).aspx
	assert {:name "BCryptCreateHash"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 19} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 19} {:print "Return"} true;
	assert irql_current == 0 || irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} BCryptDestroyHash({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375399(v=vs.85).aspx
	assert {:name "BCryptDestroyHash"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 27} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 27} {:print "Return"} true;
	assert irql_current == 0 || irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} BCryptFinishHash({:pointer} x0: int, {:pointer} {:ref "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375443(v=vs.85).aspx
	assert {:name "BCryptFinishHash"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 38} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 38} {:print "Return"} true;
	assert irql_current == 0 || irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} BCryptGenRandom({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375458(v=vs.85).aspx
	assert {:name "BCryptGenRandom"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 49} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 49} {:print "Return"} true;
	assert irql_current == 0 || irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} BCryptHashData({:pointer} x0: int, {:pointer} {:ref "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375468(v=vs.85).aspx
	assert {:name "BCryptHashData"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 60} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 60} {:print "Return"} true;
	assert irql_current == 0 || irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} BCryptOpenAlgorithmProvider({:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/desktop/aa375479(v=vs.85).aspx
	assert {:name "BCryptOpenAlgorithmProvider"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 71} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 71} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} CmCallbackGetKeyObjectID({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T.INT4"} x2: int, {:pointer} {:ptr "Mem_T.P_UNICODE_STRING"} {:ref "Mem_T.P_UNICODE_STRING"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff541895(v=vs.85).aspx
	assert {:name "CmCallbackGetKeyObjectID"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 82} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 82} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} CmRegisterCallbackEx({:scalar} x0: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x4: int, {:pointer} {:ptr "Mem_T.VOID"} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff541921(v=vs.85).aspx
	assert {:name "CmRegisterCallbackEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 95} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 95} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} CmUnRegisterCallback({:scalar} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff541928(v=vs.85).aspx
	assert {:name "CmUnRegisterCallback"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 103} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 103} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} DbgPrint({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff543632(v=vs.85).aspx
	assert {:name "DbgPrint"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 112} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 112} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} DbgPrintEx({:scalar} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.INT4"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff543634(v=vs.85).aspx
	assert {:name "DbgPrintEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 123} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 123} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquireFastMutex({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544337(v=vs.85).aspx
	assert {:name "ExAcquireFastMutex"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 131} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 131} {:print "Return"} true;
	assert irql_current <= 1;
	mutexToIrqlMap[x0] := irql_current;
	irql_current := 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquirePushLockExclusiveEx({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} {:ref "Mem_T._EX_PUSH_LOCK"} x0: int, {:scalar} x1: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExAcquirePushLockExclusiveEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 143} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 143} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquirePushLockSharedEx({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} {:ref "Mem_T._EX_PUSH_LOCK"} x0: int, {:scalar} x1: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExAcquirePushLockSharedEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 152} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 152} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquireResourceExclusiveLite({:pointer} {:ptr "Mem_T._ERESOURCE"} {:ref "Mem_T._ERESOURCE"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544351(v=vs.85).aspx
	assert {:name "ExAcquireResourceExclusiveLite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 160} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 160} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquireResourceSharedLite({:pointer} {:ptr "Mem_T._ERESOURCE"} {:ref "Mem_T._ERESOURCE"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544363(v=vs.85).aspx
	assert {:name "ExAcquireResourceSharedLite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 169} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 169} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquireRundownProtection({:pointer} {:ptr "Mem_T._EX_RUNDOWN_REF"} {:ref "Mem_T._EX_RUNDOWN_REF"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/jj569371(v=vs.85).aspx
	assert {:name "ExAcquireRundownProtection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 177} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 177} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquireSpinLockExclusive({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451007(v=vs.85).aspx
	assert {:name "ExAcquireSpinLockExclusive"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 185} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 185} {:print "Return"} true;
	assert irql_current <= 2;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAcquireSpinLockShared({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451053(v=vs.85).aspx
	assert {:name "ExAcquireSpinLockShared"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 195} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 195} {:print "Return"} true;
	assert irql_current <= 2;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAllocateCacheAwareRundownProtection({:scalar} x0: int, {:scalar} x1: int) returns ({:pointer} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExAllocateCacheAwareRundownProtection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 206} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 206} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_ExAllocatePoolWithQuotaTag({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544513(v=vs.85).aspx
	assert {:name "ExAllocatePoolWithQuotaTag"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 215} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 215} {:print "Return"} true;
	assert if((x0 mod 2) == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAllocatePoolWithQuotaTag({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544513(v=vs.85).aspx
	assert {:name "ExAllocatePoolWithQuotaTag"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 215} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 215} {:print "Return"} true;
	assert if((x0 mod 2) == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAllocatePoolWithTag({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544520(v=vs.85).aspx
	assert {:name "ExAllocatePoolWithTag"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 225} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 225} {:print "Return"} true;
	assert if((x0 mod 2) == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExAllocateTimer({:scalar} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/dn265179(v=vs.85).aspx
	assert {:name "ExAllocateTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 235} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 235} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExCancelTimer({:pointer} {:ptr "Mem_T._EX_TIMER"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/dn265180(v=vs.85).aspx
	assert {:name "ExCancelTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 244} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 244} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExConvertExclusiveToSharedLite({:pointer} {:ptr "Mem_T._ERESOURCE"} {:ref "Mem_T._ERESOURCE"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544558(v=vs.85).aspx
	assert {:name "ExConvertExclusiveToSharedLite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 252} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 252} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExDeleteNPagedLookasideList({:pointer} {:ref "Mem_T._NPAGED_LOOKASIDE_LIST"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544566(v=vs.85).aspx
	assert {:name "ExDeleteNPagedLookasideList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 260} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 260} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExDeleteResourceLite({:pointer} {:ptr "Mem_T._ERESOURCE"} {:ref "Mem_T._ERESOURCE"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544578(v=vs.85).aspx
	assert {:name "ExDeleteResourceLite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 268} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 268} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExDeleteTimer({:pointer} {:ptr "Mem_T._EX_TIMER"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T._EXT_DELETE_PARAMETERS"} {:ref "Mem_T._EXT_DELETE_PARAMETERS"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-in/library/windows/hardware/dn265181(v=vs.85).aspx
	assert {:name "ExDeleteTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 279} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 279} {:print "Return"} true;
	assert if(x2 == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExFreeCacheAwareRundownProtection({:pointer} {:ptr "Mem_T._EX_RUNDOWN_REF_CACHE_AWARE"} x0: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExFreeCacheAwareRundownProtection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 287} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 287} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_ExFreePool({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544590(v=vs.85).aspx
	assert {:name "ExFreePool"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 294} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 294} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExFreePool({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544590(v=vs.85).aspx
	assert {:name "ExFreePool"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 294} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 294} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExFreePoolWithTag({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544593(v=vs.85).aspx
	assert {:name "ExFreePoolWithTag"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 303} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 303} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExInitializeNPagedLookasideList({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int, {:scalar} x5: int, {:scalar} x6: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff545301(v=vs.85).aspx
	assert {:name "ExInitializeNPagedLookasideList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 317} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 317} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExInitializeResourceLite({:pointer} {:ptr "Mem_T._ERESOURCE"} {:ref "Mem_T._ERESOURCE"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff545317(v=vs.85).aspx
	assert {:name "ExInitializeResourceLite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 325} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 325} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExInitializeRundownProtection({:pointer} {:ptr "Mem_T._EX_RUNDOWN_REF"} {:ref "Mem_T._EX_RUNDOWN_REF"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/jj569373(v=vs.85).aspx
	assert {:name "ExInitializeRundownProtection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 333} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 333} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExIsResourceAcquiredExclusiveLite({:pointer} {:ptr "Mem_T._ERESOURCE"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff545458(v=vs.85).aspx
	assert {:name "ExIsResourceAcquiredExclusiveLite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 341} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 341} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExIsSoftBoot() returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExIsSoftBoot"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 349} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 349} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_ExQueueWorkItem({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff540216(v=vs.85).aspx
	assert {:name "ExQueueWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 357} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 357} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExQueueWorkItem({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff540216(v=vs.85).aspx
	assert {:name "ExQueueWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 357} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 357} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExRaiseDatatypeMisalignment();
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff545524(v=vs.85).aspx
	assert {:name "ExRaiseDatatypeMisalignment"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 363} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 363} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExRaiseStatus({:scalar} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff545529(v=vs.85).aspx
	assert {:name "ExRaiseStatus"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 371} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 371} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExRegisterCallback({:pointer} {:ptr "Mem_T._CALLBACK_OBJECT"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int) returns ({:pointer} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExRegisterCallback"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 381} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 381} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleaseFastMutex({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff545549(v=vs.85).aspx
	assert {:name "ExReleaseFastMutex"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 388} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 388} {:print "Return"} true;
	assert irql_current == 1;
	
	irql_current := mutexToIrqlMap[x0];
	assume 0 <= irql_current;
	assume irql_current <= 1;

	havoc mutexTmp;
	mutexToIrqlMap[x0] := mutexTmp;

	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleasePushLockEx({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} {:ref "Mem_T._EX_PUSH_LOCK"} x0: int, {:scalar} x1: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExReleasePushLockEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 406} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 406} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleasePushLockExclusiveEx({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} {:ref "Mem_T._EX_PUSH_LOCK"} x0: int, {:scalar} x1: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExReleasePushLockExclusiveEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 415} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 415} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleasePushLockSharedEx({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} {:ref "Mem_T._EX_PUSH_LOCK"} x0: int, {:scalar} x1: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExReleasePushLockSharedEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 424} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 424} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleaseResourceLite({:pointer} {:ptr "Mem_T._ERESOURCE"} {:ref "Mem_T._ERESOURCE"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff545597(v=vs.85).aspx
	assert {:name "ExReleaseResourceLite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 431} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 431} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleaseRundownProtection({:pointer} {:ptr "Mem_T._EX_RUNDOWN_REF"} {:ref "Mem_T._EX_RUNDOWN_REF"} x0: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExReleaseRundownProtection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 439} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 439} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleaseSpinLockExclusive({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451061(v=vs.85).aspx
	assert {:name "ExReleaseSpinLockExclusive"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 447} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 447} {:print "Return"} true;
	assert irql_current == 2;
	assert x1 <= irql_current;
	irql_current := x1;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExReleaseSpinLockShared({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451067(v=vs.85).aspx
	assert {:name "ExReleaseSpinLockShared"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 460} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 460} {:print "Return"} true;
	assert irql_current == 2;
	assert x1 <= irql_current;
	irql_current := x1;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExSetTimer({:pointer} {:ptr "Mem_T._EX_TIMER"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T._EXT_SET_PARAMETERS_V0"} {:ref "Mem_T._EXT_SET_PARAMETERS_V0"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/dn265188(v=vs.85).aspx
	assert {:name "ExSetTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 475} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 475} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExUuidCreate({:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ex_x.h
	assert {:name "ExUuidCreate"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 483} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 483} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExWaitForRundownProtectionRelease({:pointer} {:ptr "Mem_T._EX_RUNDOWN_REF"} {:ref "Mem_T._EX_RUNDOWN_REF"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/jj569378(v=vs.85).aspx
	assert {:name "ExWaitForRundownProtectionRelease"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 490} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 490} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExfAcquirePushLockExclusive({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} x0: int);
}
-->
{
	// path:/onecore/com/netfx/windowsbuilt/public/sdk/armInc/minwin/ntosifs.h
	assert {:name "ExfAcquirePushLockExclusive"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 499} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 499} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExfAcquirePushLockShared({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} x0: int);
}
-->
{
	// path:/onecore/com/netfx/windowsbuilt/public/sdk/armInc/minwin/ntosifs.h
	assert {:name "ExfAcquirePushLockShared"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 507} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 507} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExfReleasePushLock({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} x0: int);
}
-->
{
	// path:/onecore/com/netfx/windowsbuilt/public/sdk/armInc/minwin/ntosifs.h
	assert {:name "ExfReleasePushLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 515} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 515} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExfReleasePushLockShared({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} x0: int);
}
-->
{
	// path:/onecore/com/netfx/windowsbuilt/public/sdk/armInc/minwin/ntosifs.h
	assert {:name "ExfReleasePushLockShared"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 523} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 523} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExfTryAcquirePushLockShared({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// path:/onecore/com/netfx/windowsbuilt/public/sdk/armInc/minwin/ntosifs.h
	assert {:name "ExfTryAcquirePushLockShared"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 532} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 532} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ExfTryToWakePushLock({:pointer} {:ptr "Mem_T._EX_PUSH_LOCK"} x0: int);
}
-->
{
	// path:/onecore/com/netfx/windowsbuilt/public/sdk/armInc/minwin/ntosifs.h
	assert {:name "ExfTryToWakePushLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 539} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 539} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} {:#MatchPtrs} IoAcquireCancelSpinLock({:pointer} {:ptr "PtrToInt_DummyMarker"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548196(v=vs.85).aspx
	assert {:name "IoAcquireCancelSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 546} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 546} {:print "Return"} true;
	assert irql_current <= 2;
	PtrToInt_DummyMarker[x0] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoAllocateDriverObjectExtension({:pointer} {:ptr "Mem_T._DRIVER_OBJECT"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548233(v=vs.85).aspx
	assert {:name "IoAllocateDriverObjectExtension"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 559} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 559} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoAllocateErrorLogEntry({:pointer} x0: int, {:scalar} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548245(v=vs.85).aspx
	assert {:name "IoAllocateErrorLogEntry"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 568} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 568} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoAllocateIrp({:scalar} x0: int, {:scalar} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548257(v=vs.85).aspx
	assert {:name "IoAllocateIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 577} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 577} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoAllocateMdl({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} x4: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548263(v=vs.85).aspx
	assert {:name "IoAllocateMdl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 589} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 589} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoAllocateWorkItem({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548276(v=vs.85).aspx
	assert {:name "IoAllocateWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 597} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 597} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoAttachDeviceToDeviceStack({:pointer} x0: int, {:pointer} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548300(v=vs.85).aspx
	assert {:name "IoAttachDeviceToDeviceStack"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 606} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 606} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoBuildAsynchronousFsdRequest({:scalar} x0: int, {:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T._LARGE_INTEGER"} x4: int, {:pointer} {:ptr "Mem_T._IO_STATUS_BLOCK"} x5: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548310(v=vs.85).aspx
	assert {:name "IoBuildAsynchronousFsdRequest"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 619} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 619} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoBuildDeviceIoControlRequest({:scalar} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:scalar} x3: int, {:pointer} x4: int, {:scalar} x5: int, {:scalar} x6: int, {:pointer} {:ref "Mem_T.VOID"} x7: int, {:pointer} {:ref "Mem_T._IO_STATUS_BLOCK"} x8: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548318(v=vs.85).aspx
	assert {:name "IoBuildDeviceIoControlRequest"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 635} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 635} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoBuildSynchronousFsdRequest({:scalar} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:scalar} x3: int, {:pointer} x4: int, {:pointer} {:ref "Mem_T.VOID"} x5: int, {:pointer} {:ref "Mem_T._IO_STATUS_BLOCK"} x6: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548330(v=vs.85).aspx
	assert {:name "IoBuildSynchronousFsdRequest"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 649} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 649} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoCancelIrp({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548338(v=vs.85).aspx
	assert {:name "IoCancelIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 657} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 657} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoConnectInterrupt({:pointer} {:ptr "Mem_T.P_KINTERRUPT"} {:ref "Mem_T.P_KINTERRUPT"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:pointer} {:ptr "Mem_T.INT4"} x3: int, {:scalar} x4: int, {:scalar} x5: int, {:scalar} x6: int, {:scalar} x7: int, {:scalar} x8: int, {:scalar} x9: int, {:scalar} x10: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548371(v=vs.85).aspx
	assert {:name "IoConnectInterrupt"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 675} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 675} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoCreateDevice({:pointer} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T._UNICODE_STRING"} x2: int, {:scalar} x3: int, {:scalar} x4: int, {:scalar} x5: int, {:pointer} {:ref "Mem_T.P_DEVICE_OBJECT"} x6: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548397(v=vs.85).aspx
	assert {:name "IoCreateDevice"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 689} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 689} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoCreateSymbolicLink({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ref "Mem_T._UNICODE_STRING"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549043(v=vs.85).aspx
	assert {:name "IoCreateSymbolicLink"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 698} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 698} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoCreateUnprotectedSymbolicLink({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ref "Mem_T._UNICODE_STRING"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549050(v=vs.85).aspx
	assert {:name "IoCreateUnprotectedSymbolicLink"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 707} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 707} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_IoCsqInsertIrp({:pointer} {:ref "Mem_T._IO_CSQ"} x0: int, {:pointer} x1: int, {:pointer} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549066(v=vs.85).aspx
	assert {:name "IoCsqInsertIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 717} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 717} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoCsqInsertIrp({:pointer} {:ref "Mem_T._IO_CSQ"} x0: int, {:pointer} x1: int, {:pointer} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549066(v=vs.85).aspx
	assert {:name "IoCsqInsertIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 717} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 717} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_IoCsqRemoveNextIrp({:pointer} {:ref "Mem_T._IO_CSQ"} x0: int, {:pointer} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549072(v=vs.85).aspx
	assert {:name "IoCsqRemoveNextIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 726} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 726} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoCsqRemoveNextIrp({:pointer} {:ref "Mem_T._IO_CSQ"} x0: int, {:pointer} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549072(v=vs.85).aspx
	assert {:name "IoCsqRemoveNextIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 726} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 726} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoDeleteDevice({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549083(v=vs.85).aspx
	assert {:name "IoDeleteDevice"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 734} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 734} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoDeleteSymbolicLink({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549085(v=vs.85).aspx
	assert {:name "IoDeleteSymbolicLink"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 742} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 742} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoDetachDevice({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549087(v=vs.85).aspx
	assert {:name "IoDetachDevice"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 750} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 750} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoDisconnectInterrupt({:pointer} {:ptr "Mem_T._KINTERRUPT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549089(v=vs.85).aspx
	assert {:name "IoDisconnectInterrupt"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 758} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 758} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoFreeIrp({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549113(v=vs.85).aspx
	assert {:name "IoFreeIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 766} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 766} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoFreeMdl({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549126(v=vs.85).aspx
	assert {:name "IoFreeMdl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 774} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 774} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoFreeWorkItem({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549133(v=vs.85).aspx
	assert {:name "IoFreeWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 782} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 782} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoGetAttachedDeviceReference({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549145(v=vs.85).aspx
	assert {:name "IoGetAttachedDeviceReference"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 790} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 790} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoGetConfigurationInformation() returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549157(v=vs.85).aspx
	assert {:name "IoGetConfigurationInformation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 796} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 796} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoGetDeviceProperty({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:pointer} {:ref "Mem_T.INT4"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549203(v=vs.85).aspx
	assert {:name "IoGetDeviceProperty"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 808} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 808} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoGetDmaAdapter({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int, {:pointer} {:ptr "Mem_T._DEVICE_DESCRIPTION"} {:ref "Mem_T._DEVICE_DESCRIPTION"} x1: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549220(v=vs.85).aspx
	assert {:name "IoGetDmaAdapter"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 818} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 818} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoGetDriverObjectExtension({:pointer} {:ptr "Mem_T._DRIVER_OBJECT"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549229(v=vs.85).aspx
	assert {:name "IoGetDriverObjectExtension"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 827} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 827} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoGetInitialStack() returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549247(v=vs.85).aspx
	assert {:name "IoGetInitialStack"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 833} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 833} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoGetRequestorSessionId({:pointer} x0: int, {:pointer} {:ref "Mem_T.INT4"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548399(v=vs.85).aspx
	assert {:name "IoGetRequestorSessionId"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 842} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 842} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoInitializeIrp({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549315(v=vs.85).aspx
	assert {:name "IoInitializeIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 852} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 852} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoInitializeTimer({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549344(v=vs.85).aspx
	assert {:name "IoInitializeTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 862} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 862} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoInvalidateDeviceRelations({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549353(v=vs.85).aspx
	assert {:name "IoInvalidateDeviceRelations"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 871} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 871} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoInvalidateDeviceState({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549361(v=vs.85).aspx
	assert {:name "IoInvalidateDeviceState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 879} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 879} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoOpenDeviceRegistryKey({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ref "Mem_T.PVOID"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549443(v=vs.85).aspx
	assert {:name "IoOpenDeviceRegistryKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 890} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 890} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoQueueWorkItem({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549466(v=vs.85).aspx
	assert {:name "IoQueueWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 901} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 901} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoRegisterDeviceInterface({:pointer} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} {:ref "Mem_T._UNICODE_STRING"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549506(v=vs.85).aspx
	assert {:name "IoRegisterDeviceInterface"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 912} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 912} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoRegisterPlugPlayNotification({:scalar} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T.VOID"} x2: int, {:pointer} x3: int, {:scalar} x4: int, {:pointer} x5: int, {:pointer} {:ref "Mem_T.PVOID"} x6: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549526(v=vs.85).aspx
	assert {:name "IoRegisterPlugPlayNotification"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 926} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 926} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoReleaseCancelSpinLock({:scalar} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549550(v=vs.85).aspx
	assert {:name "IoReleaseCancelSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 934} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 934} {:print "Return"} true;
	assert irql_current == 2;
	assert x0 <= irql_current;
	irql_current := x0;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoReportDetectedDevice({:pointer} {:ptr "Mem_T._DRIVER_OBJECT"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T._CM_RESOURCE_LIST"} x4: int, {:pointer} {:ptr "Mem_T._IO_RESOURCE_REQUIREMENTS_LIST"} x5: int, {:scalar} x6: int, {:pointer} {:ptr "Mem_T.P_DEVICE_OBJECT"} {:ref "Mem_T.P_DEVICE_OBJECT"} x7: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549597(v=vs.85).aspx
	assert {:name "IoReportDetectedDevice"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 953} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 953} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoReuseIrp({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549661(v=vs.85).aspx
	assert {:name "IoReuseIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 962} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 962} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoSetDeviceInterfacePropertyData({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ref "Mem_T._DEVPROPKEY"} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int, {:scalar} x5: int, {:pointer} {:ref "Mem_T.VOID"} x6: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh439388(v=vs.85).aspx
	assert {:name "IoSetDeviceInterfacePropertyData"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 976} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 976} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoSetDeviceInterfaceState({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549700(v=vs.85).aspx
	assert {:name "IoSetDeviceInterfaceState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 985} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 985} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoSetThreadHardErrorMode({:scalar} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550342(v=vs.85).aspx
	assert {:name "IoSetThreadHardErrorMode"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 993} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 993} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoStartNextPacket({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550358(v=vs.85).aspx
	assert {:name "IoStartNextPacket"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1002} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1002} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoStartPacket({:pointer} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:scalar} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550370(v=vs.85).aspx
	assert {:name "IoStartPacket"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1013} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1013} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoStartTimer({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550373(v=vs.85).aspx
	assert {:name "IoStartTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1021} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1021} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoStopTimer({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550377(v=vs.85).aspx
	assert {:name "IoStopTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1029} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1029} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoUnregisterPlugPlayNotification({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550398(v=vs.85).aspx
	assert {:name "IoUnregisterPlugPlayNotification"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1037} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1037} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoWMIRegistrationControl({:pointer} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550480(v=vs.85).aspx
	assert {:name "IoWMIRegistrationControl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1046} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1046} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoWMIWriteEvent({:pointer} {:ref "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff550520(v=vs.85).aspx
	assert {:name "IoWMIWriteEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1054} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1054} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoWriteErrorLogEntry({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/ff550527(v=vs.85).aspx
	assert {:name "IoWriteErrorLogEntry"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1062} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1062} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IofCallDriver({:pointer} x0: int, {:pointer} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548336(v=vs.85).aspx
	assert {:name "IoCallDriver"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1071} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1071} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_IofCompleteRequest({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548343(v=vs.85).aspx
	assert {:name "IoCompleteRequest"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1080} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1080} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IofCompleteRequest({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548343(v=vs.85).aspx
	assert {:name "IoCompleteRequest"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1080} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1080} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireGuardedMutex({:pointer} {:ptr "Mem_T._FAST_MUTEX"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551892(v=vs.85).aspx
	assert {:name "KeAcquireGuardedMutex"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1088} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1088} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAreApcsDisabled() returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551938(v=vs.85).aspx
	assert {:name "KeAreApcsDisabled"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1094} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1094} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeCancelTimer({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551970(v=vs.85).aspx
	assert {:name "KeCancelTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1102} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1102} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeClearEvent({:pointer} {:ref "Mem_T.VOID"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551980(v=vs.85).aspx
	assert {:name "KeClearEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1110} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1110} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeDelayExecutionThread({:scalar} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T._LARGE_INTEGER"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551986(v=vs.85).aspx
	assert {:name "KeDelayExecutionThread"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1120} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1120} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeEnterCriticalRegion();
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552021(v=vs.85).aspx
	assert {:name "KeEnterCriticalRegion"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1126} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1126} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeFlushIoBuffers({:pointer} {:ptr "Mem_T._MDL"} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552041(v=vs.85).aspx
	assert {:name "KeFlushIoBuffers"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1136} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1136} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeFlushIoBuffers({:pointer} {:ptr "Mem_T._MDL"} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552041(v=vs.85).aspx
	assert {:name "KeFlushIoBuffers"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1136} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1136} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeFlushQueuedDpcs();
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552050(v=vs.85).aspx
	assert {:name "KeFlushQueuedDpcs"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1142} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1142} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeGenericCallDpc({:scalar} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeGenericCallDpc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1151} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1151} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeGetCurrentIrql() returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552054(v=vs.85).aspx
	assert {:name "KeGetCurrentIrql"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1156} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1156} {:print "Return"} true;
	r := irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeGetCurrentIrql() returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552054(v=vs.85).aspx
	assert {:name "KeGetCurrentIrql"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1156} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1156} {:print "Return"} true;
	r := irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInitializeDeviceQueue({:pointer} {:ptr "Mem_T._KDEVICE_QUEUE"} {:ref "Mem_T._KDEVICE_QUEUE"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552126(v=vs.85).aspx
	assert {:name "KeInitializeDeviceQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1164} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1164} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInitializeGuardedMutex({:pointer} {:ptr "Mem_T._FAST_MUTEX"} {:ref "Mem_T._FAST_MUTEX"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552144(v=vs.85).aspx
	assert {:name "KeInitializeGuardedMutex"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1172} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1172} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInitializeProfileCallback({:pointer} {:ptr "Mem_T._KPROFILE"} {:ref "Mem_T._KPROFILE"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:scalar} x3: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeInitializeProfileCallback"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1183} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1183} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInitializeQueue({:pointer} {:ptr "Mem_T._KQUEUE"} {:ref "Mem_T._KQUEUE"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549547(v=vs.85).aspx
	assert {:name "KeInitializeQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1191} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1191} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInitializeTimer({:pointer} {:ref "Mem_T._KTIMER"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552168(v=vs.85).aspx
	assert {:name "KeInitializeTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1199} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1199} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInitializeTimerEx({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552173(v=vs.85).aspx
	assert {:name "KeInitializeTimerEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1208} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1208} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInsertByKeyDeviceQueue({:pointer} {:ptr "Mem_T._KDEVICE_QUEUE"} {:ref "Mem_T._KDEVICE_QUEUE"} x0: int, {:pointer} {:ptr "Mem_T._KDEVICE_QUEUE_ENTRY"} {:ref "Mem_T._KDEVICE_QUEUE_ENTRY"} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552178(v=vs.85).aspx
	assert {:name "KeInsertByKeyDeviceQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1218} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1218} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInsertDeviceQueue({:pointer} {:ptr "Mem_T._KDEVICE_QUEUE"} {:ref "Mem_T._KDEVICE_QUEUE"} x0: int, {:pointer} {:ptr "Mem_T._KDEVICE_QUEUE_ENTRY"} {:ref "Mem_T._KDEVICE_QUEUE_ENTRY"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552180(v=vs.85).aspx
	assert {:name "KeInsertDeviceQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1227} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1227} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInsertQueue({:pointer} {:ptr "Mem_T._KQUEUE"} {:ref "Mem_T._KQUEUE"} x0: int, {:pointer} {:ptr "Mem_T._LIST_ENTRY"} {:ref "Mem_T._LIST_ENTRY"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549570(v=vs.85).aspx
	assert {:name "KeInsertQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1236} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1236} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeInsertQueueApc({:pointer} {:ptr "Mem_T._KAPC"} {:ref "Mem_T._KAPC"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeInsertQueueApc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1247} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1247} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeIsAttachedProcess() returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke_x.h
	assert {:name "KeIsAttachedProcess"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1254} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1254} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeLeaveCriticalRegion();
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552964(v=vs.85).aspx
	assert {:name "KeLeaveCriticalRegion"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1259} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1259} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeQueryBootTimeValues({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x2: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeQueryBootTimeValues"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1269} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1269} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeQueryCurrentStackInformation({:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x0: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x1: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeQueryCurrentStackInformation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1278} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1278} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeRaiseIrqlToDpcLevel() returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553084(v=vs.85).aspx
	assert {:name "KeRaiseIrqlToDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1283} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1283} {:print "Return"} true;
	assert irql_current <= 2;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeRaiseIrqlToDpcLevel() returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553084(v=vs.85).aspx
	assert {:name "KeRaiseIrqlToDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1283} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1283} {:print "Return"} true;
	assert irql_current <= 2;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReadStateEvent({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553089(v=vs.85).aspx
	assert {:name "KeReadStateEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1293} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1293} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseGuardedMutex({:pointer} {:ptr "Mem_T._FAST_MUTEX"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553124(v=vs.85).aspx
	assert {:name "KeReleaseGuardedMutex"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1301} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1301} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseMutex({:pointer} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553140(v=vs.85).aspx
	assert {:name "KeReleaseMutex"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1310} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1310} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeRemoveDeviceQueue({:pointer} {:ref "Mem_T._KDEVICE_QUEUE"} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553156(v=vs.85).aspx
	assert {:name "KeRemoveDeviceQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1318} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1318} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeRemoveEntryDeviceQueue({:pointer} {:ref "Mem_T._KDEVICE_QUEUE"} x0: int, {:pointer} {:ref "Mem_T._KDEVICE_QUEUE_ENTRY"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553163(v=vs.85).aspx
	assert {:name "KeRemoveEntryDeviceQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1327} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1327} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeRemoveQueue({:pointer} {:ptr "Mem_T._KQUEUE"} {:ref "Mem_T._KQUEUE"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549605(v=vs.85).aspx
	assert {:name "KeRemoveQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1337} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1337} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeRemoveQueueApc({:pointer} {:ptr "Mem_T._KAPC"} {:ref "Mem_T._KAPC"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeRemoveQueueApc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1345} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1345} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeResetEvent({:pointer} {:ref "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553176(v=vs.85).aspx
	assert {:name "KeResetEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1352} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1352} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeRestoreFloatingPointState({:pointer} {:ref "Mem_T._KFLOATING_SAVE"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553185(v=vs.85).aspx
	assert {:name "KeRestoreFloatingPointState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1360} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1360} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeRundownQueue({:pointer} {:ptr "Mem_T._KQUEUE"} {:ref "Mem_T._KQUEUE"} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549638(v=vs.85).aspx
	assert {:name "KeRundownQueue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1368} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1368} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeSaveFloatingPointState({:pointer} {:ref "Mem_T._KFLOATING_SAVE"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553243(v=vs.85).aspx
	assert {:name "KeSaveFloatingPointState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1376} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1376} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeSetActualBasePriorityThread({:pointer} {:ptr "Mem_T._KTHREAD"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke_x.h
	assert {:name "KeSetActualBasePriorityThread"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1385} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1385} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeSetCoalescableTimer({:pointer} {:ptr "Mem_T._KTIMER"} {:ref "Mem_T._KTIMER"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T._KDPC"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553249(v=vs.85).aspx
	assert {:name "KeSetCoalescableTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1396} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1396} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeSetEvent({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553253(v=vs.85).aspx
	assert {:name "KeSetEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1406} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1406} {:print "Return"} true;
	assert if(x2 == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeSetTimer({:pointer} {:ref "Mem_T._KTIMER"} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T._KDPC"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553286(v=vs.85).aspx
	assert {:name "KeSetTimer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1416} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1416} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeSetTimerEx({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553292(v=vs.85).aspx
	assert {:name "KeSetTimerEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1427} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1427} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeSignalCallDpcDone({:pointer} {:ptr "Mem_T.VOID"} x0: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeSignalCallDpcDone"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1435} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1435} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeStackAttachProcess({:pointer} {:ptr "Mem_T._KPROCESS"} {:ref "Mem_T._KPROCESS"} x0: int, {:pointer} {:ptr "Mem_T._KAPC_STATE"} {:ref "Mem_T._KAPC_STATE"} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549659(v=vs.85).aspx
	assert {:name "KeStackAttachProcess"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1443} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1443} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeStartProfile({:pointer} {:ptr "Mem_T._KPROFILE"} {:ref "Mem_T._KPROFILE"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeStartProfile"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1451} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1451} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeStopProfile({:pointer} {:ptr "Mem_T._KPROFILE"} {:ref "Mem_T._KPROFILE"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeStopProfile"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1458} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1458} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeTryToAcquireSpinLockAtDpcLevel({:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553317(v=vs.85).aspx
	assert {:name "KeTryToAcquireSpinLockAtDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1465} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1465} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeTryToInsertQueueApc({:pointer} {:ptr "Mem_T._KAPC"} {:ref "Mem_T._KAPC"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/inc/ke.h
	assert {:name "KeTryToInsertQueueApc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1475} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1475} {:print "Return"} true;
	assert irql_current > 2;
	assert irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeUnstackDetachProcess({:pointer} {:ptr "Mem_T._KAPC_STATE"} {:ref "Mem_T._KAPC_STATE"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff549677(v=vs.85).aspx
	assert {:name "KeUnstackDetachProcess"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1483} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1483} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeWaitForMultipleObjects({:scalar} x0: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int, {:scalar} x5: int, {:pointer} {:ptr "Mem_T.VOID"} x6: int, {:pointer} {:ptr "Mem_T._KWAIT_BLOCK"} x7: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553324(v=vs.85).aspx
	assert {:name "KeWaitForMultipleObjects"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1498} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1498} {:print "Return"} true;
	assert if(x6 == 0 || Mem_T.VOID[x6] != 0) then irql_current <= 1 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} {:#MatchPtrs} KeWaitForSingleObject({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T._LARGE_INTEGER"} {:ref "Mem_T._LARGE_INTEGER"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553350(v=vs.85).aspx
	assert {:name "KeWaitForSingleObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Return"} true;
	assert if(x4 == 0 || Mem_T._LARGE_INTEGER[x4] != 0) then irql_current <= 1 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} {:#MatchPtrs} KeWaitForSingleObject({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553350(v=vs.85).aspx
	assert {:name "KeWaitForSingleObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Return"} true;
	assert if(x4 == 0 || Mem_T.INT4[x4] != 0) then irql_current <= 1 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} {:#MatchPtrs} KeWaitForSingleObject({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T._CC_FILE_SIZES"} {:ref "Mem_T._CC_FILE_SIZES"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553350(v=vs.85).aspx
	assert {:name "KeWaitForSingleObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Return"} true;
	assert if(x4 == 0 || Mem_T._CC_FILE_SIZES[x4] != 0) then irql_current <= 1 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} {:#MatchPtrs} KeWaitForSingleObject({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553350(v=vs.85).aspx
	assert {:name "KeWaitForSingleObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1510} {:print "Return"} true;
	assert if(x4 == 0 || Mem_T.VOID[x4] != 0) then irql_current <= 1 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KefAcquireSpinLockAtDpcLevel({:pointer} {:ref "Mem_T.INT4"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551921(v=vs.85).aspx
	assert {:name "KeAcquireSpinLockAtDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1554} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1554} {:print "Return"} true;
	assert irql_current >= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KefReleaseSpinLockFromDpcLevel({:pointer} {:ref "Mem_T.INT4"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553150(v=vs.85).aspx
	assert {:name "KeReleaseSpinLockFromDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1562} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1562} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KfAcquireSpinLock({:pointer} {:ref "Mem_T.INT4"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551917(v=vs.85).aspx
	assert {:name "KeAcquireSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1571} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1571} {:print "Return"} true;
	assert irql_current <= 2;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KfLowerIrql({:scalar} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552968(v=vs.85).aspx
	assert {:name "KeLowerIrql"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1581} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1581} {:print "Return"} true;
	assert x0 <= irql_current;
	irql_current := x0;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KfRaiseIrql({:scalar} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553079(v=vs.85).aspx
	assert {:name "KeRaiseIrql"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1593} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1593} {:print "Return"} true;
	assert x0 >= irql_current;
	r := irql_current;
	irql_current := x0;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KfReleaseSpinLock({:pointer} {:ref "Mem_T.INT4"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553145(v=vs.85).aspx
	assert {:name "KeReleaseSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1606} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1606} {:print "Return"} true;
	assert irql_current == 2;
	assert x1 <= irql_current;
	irql_current := x1;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsAcquireControl({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff560908(v=vs.85).aspx
	assert {:name "KsAcquireControl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1618} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1618} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsAddEvent({:pointer} x0: int, {:pointer} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff560931(v=vs.85).aspx
	assert {:name "KsAddEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1627} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1627} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsGenerateEvents({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} x4: int, {:scalar} x5: int, {:pointer} x6: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562597(v=vs.85).aspx
	assert {:name "KsGenerateEvents"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1641} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1641} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsGetDevice({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562615(v=vs.85).aspx
	assert {:name "KsGetDevice"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1649} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1649} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsGetFirstChild({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562626(v=vs.85).aspx
	assert {:name "KsGetFirstChild"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1657} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1657} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsGetNextSibling({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/ko-kr/library/windows/hardware/ff562643(v=vs.85).aspx
	assert {:name "KsGetNextSibling"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1665} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1665} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsGetOuterUnknown({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562655(v=vs.85).aspx
	assert {:name "KsGetOuterUnknown"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1673} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1673} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsGetParent({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562658(v=vs.85).aspx
	assert {:name "KsGetParent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1681} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1681} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsRegisterAggregatedClientUnknown({:pointer} x0: int, {:pointer} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566767(v=vs.85).aspx
	assert {:name "KsRegisterAggregatedClientUnknown"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1690} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1690} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KsReleaseControl({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566780(v=vs.85).aspx
	assert {:name "KsReleaseControl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1698} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1698} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmAddVerifierThunks({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// path:/xbox/lnm/ntos/mmx/verifier.c
	assert {:name "MmAddVerifierThunks"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1707} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1707} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmAllocateContiguousMemory({:scalar} x0: int, {:scalar} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554460(v=vs.85).aspx
	assert {:name "MmAllocateContiguousMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1715} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1715} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmAllocateContiguousMemorySpecifyCache({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554464(v=vs.85).aspx
	assert {:name "MmAllocateContiguousMemorySpecifyCache"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1727} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1727} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmAllocateContiguousNodeMemory({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int, {:scalar} x5: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/jj602795(v=vs.85).aspx
	assert {:name "MmAllocateContiguousNodeMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1740} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1740} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmAllocateMappingAddress({:scalar} x0: int, {:scalar} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554475(v=vs.85).aspx
	assert {:name "MmAllocateMappingAddress"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1749} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1749} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmBuildMdlForNonPagedPool({:pointer} {:ref "Mem_T._MDL"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554498(v=vs.85).aspx
	assert {:name "MmBuildMdlForNonPagedPool"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1757} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1757} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmFreeContiguousMemory({:pointer} {:ptr "Mem_T.VOID"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554503(v=vs.85).aspx
	assert {:name "MmFreeContiguousMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1765} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1765} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmFreeContiguousMemorySpecifyCache({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554507(v=vs.85).aspx
	assert {:name "MmFreeContiguousMemorySpecifyCache"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1775} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1775} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmFreeMappingAddress({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554512(v=vs.85).aspx
	assert {:name "MmFreeMappingAddress"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1784} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1784} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmGetSystemRoutineAddress({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554563(v=vs.85).aspx
	assert {:name "MmGetSystemRoutineAddress"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1792} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1792} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmIsVerifierEnabled({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/ntos/verifier/vfutil.c
	assert {:name "MmIsVerifierEnabled"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1800} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1800} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmLockPagableDataSection({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554607(v=vs.85).aspx
	assert {:name "MmLockPagableDataSection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1807} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1807} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmLockPagableSectionByHandle({:pointer} {:ptr "Mem_T.VOID"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554610(v=vs.85).aspx
	assert {:name "MmLockPagableSectionByHandle"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1815} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1815} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmMapIoSpace({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554618(v=vs.85).aspx
	assert {:name "MmMapIoSpace"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1825} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1825} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmMapIoSpaceEx({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/dn939699(v=vs.85).aspx
	assert {:name "MmMapIoSpace"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1825} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1825} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_MmMapLockedPagesSpecifyCache({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:scalar} x4: int, {:scalar} x5: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554629(v=vs.85).aspx
	assert {:name "MmMapLockedPagesSpecifyCache"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1848} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1848} {:print "Return"} true;
	assert if(x1 == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmMapLockedPagesSpecifyCache({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:scalar} x4: int, {:scalar} x5: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554629(v=vs.85).aspx
	assert {:name "MmMapLockedPagesSpecifyCache"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1848} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1848} {:print "Return"} true;
	assert if(x1 == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmMapLockedPagesWithReservedMapping({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T._MDL"} x2: int, {:scalar} x3: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554640(v=vs.85).aspx
	assert {:name "MmMapLockedPagesWithReservedMapping"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1859} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1859} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmProbeAndLockPages({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554664(v=vs.85).aspx
	assert {:name "MmProbeAndLockPages"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1869} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1869} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmProtectMdlSystemAddress({:pointer} {:ptr "Mem_T._MDL"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554670(v=vs.85).aspx
	assert {:name "MmProtectMdlSystemAddress"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1878} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1878} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmUnlockPagableImageSection({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff556377(v=vs.85).aspx
	assert {:name "MmUnlockPagableImageSection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1886} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1886} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmUnlockPages({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff556381(v=vs.85).aspx
	assert {:name "MmUnlockPages"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1894} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1894} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmUnmapIoSpace({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff556387(v=vs.85).aspx
	assert {:name "MmUnmapIoSpace"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1903} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1903} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmUnmapLockedPages({:pointer} x0: int, {:pointer} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff556391(v=vs.85).aspx
	assert {:name "MmUnmapLockedPages"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1912} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1912} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MmUnmapReservedMapping({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T._MDL"} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff556392(v=vs.85).aspx
	assert {:name "MmUnmapReservedMapping"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1922} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1922} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MxAllocatePoolWithTag({:scalar} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544520(v=vs.85).aspx
	assert {:name "ExAllocatePoolWithTag"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 225} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 225} {:print "Return"} true;
	assert if((x0 mod 2) == 0) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MxDelayExecutionThread({:scalar} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T._LARGE_INTEGER"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff551986(v=vs.85).aspx
	assert {:name "KeDelayExecutionThread"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1120} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1120} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} MxFreePoolWithTag({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff544593(v=vs.85).aspx
	assert {:name "ExFreePoolWithTag"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 303} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 303} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAllocateIoWorkItem({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561604(v=vs.85).aspx
	assert {:name "NdisAllocateIoWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1959} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1959} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisAllocateIoWorkItem({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561604(v=vs.85).aspx
	assert {:name "NdisAllocateIoWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1959} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1959} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAllocateMdl({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561605(v=vs.85).aspx
	assert {:name "NdisAllocateMdl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1969} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1969} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisAllocateMdl({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561605(v=vs.85).aspx
	assert {:name "NdisAllocateMdl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1969} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1969} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAllocateMemoryWithTagPriority({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561606(v=vs.85).aspx
	assert {:name "NdisAllocateMemoryWithTagPriority"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1980} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1980} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisAllocateMemoryWithTagPriority({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561606(v=vs.85).aspx
	assert {:name "NdisAllocateMemoryWithTagPriority"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1980} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1980} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAllocateNetBufferAndNetBufferList({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:scalar} x4: int, {:scalar} x5: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561608(v=vs.85).aspx
	assert {:name "NdisAllocateNetBufferAndNetBufferList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1993} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1993} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisAllocateNetBufferAndNetBufferList({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:scalar} x4: int, {:scalar} x5: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561608(v=vs.85).aspx
	assert {:name "NdisAllocateNetBufferAndNetBufferList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1993} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1993} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAllocateNetBufferList({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561609(v=vs.85).aspx
	assert {:name "NdisAllocateNetBufferList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2003} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2003} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisAllocateNetBufferList({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561609(v=vs.85).aspx
	assert {:name "NdisAllocateNetBufferList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2003} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2003} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAllocateNetBufferListPool({:pointer} x0: int, {:pointer} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561611(v=vs.85).aspx
	assert {:name "NdisAllocateNetBufferListPool"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2012} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2012} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisAllocateNetBufferListPool({:pointer} x0: int, {:pointer} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561611(v=vs.85).aspx
	assert {:name "NdisAllocateNetBufferListPool"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2012} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2012} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAllocateTimerObject({:pointer} x0: int, {:pointer} x1: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561618(v=vs.85).aspx
	assert {:name "NdisAllocateTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2022} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2022} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisAllocateTimerObject({:pointer} x0: int, {:pointer} x1: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561618(v=vs.85).aspx
	assert {:name "NdisAllocateTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2022} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2022} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisCancelTimerObject({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561624(v=vs.85).aspx
	assert {:name "NdisCancelTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2030} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2030} {:print "Return"} true;
	assert irql_current <=2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisCancelTimerObject({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561624(v=vs.85).aspx
	assert {:name "NdisCancelTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2030} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2030} {:print "Return"} true;
	assert irql_current <=2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisCloseConfiguration({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561642(v=vs.85).aspx
	assert {:name "NdisCloseConfiguration"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2038} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2038} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisCloseConfiguration({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561642(v=vs.85).aspx
	assert {:name "NdisCloseConfiguration"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2038} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2038} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisFreeIoWorkItem({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561855(v=vs.85).aspx
	assert {:name "NdisFreeIoWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2046} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2046} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisFreeIoWorkItem({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561855(v=vs.85).aspx
	assert {:name "NdisFreeIoWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2046} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2046} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisFreeMdl({:pointer} {:ptr "Mem_T._MDL"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562575(v=vs.85).aspx
	assert {:name "NdisFreeMdl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2054} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2054} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisFreeMdl({:pointer} {:ptr "Mem_T._MDL"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562575(v=vs.85).aspx
	assert {:name "NdisFreeMdl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2054} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2054} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisFreeMemory({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562577(v=vs.85).aspx
	assert {:name "NdisFreeMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2064} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2064} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisFreeMemory({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562577(v=vs.85).aspx
	assert {:name "NdisFreeMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2064} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2064} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisFreeNetBufferList({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562583(v=vs.85).aspx
	assert {:name "NdisFreeNetBufferList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2072} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2072} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisFreeNetBufferList({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562583(v=vs.85).aspx
	assert {:name "NdisFreeNetBufferList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2072} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2072} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisFreeNetBufferListPool({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562590(v=vs.85).aspx
	assert {:name "NdisFreeNetBufferListPool"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2080} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2080} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisFreeNetBufferListPool({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562590(v=vs.85).aspx
	assert {:name "NdisFreeNetBufferListPool"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2080} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2080} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisFreeTimerObject({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562605(v=vs.85).aspx
	assert {:name "NdisFreeTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2088} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2088} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisFreeTimerObject({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562605(v=vs.85).aspx
	assert {:name "NdisFreeTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2088} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2088} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisGetProcessorInformation({:pointer} {:ptr "Mem_T._NDIS_SYSTEM_PROCESSOR_INFO"} {:ref "Mem_T._NDIS_SYSTEM_PROCESSOR_INFO"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562661(v=vs.85).aspx
	assert {:name "NdisGetProcessorInformation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2096} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2096} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisGetProcessorInformationEx({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._NDIS_SYSTEM_PROCESSOR_INFO_EX"} x1: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562662(v=vs.85).aspx
	assert {:name "NdisGetProcessorInformationEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2106} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2106} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisGetVersion() returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562680(v=vs.85).aspx
	assert {:name "NdisGetVersion"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2112} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2112} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisGetVersion() returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562680(v=vs.85).aspx
	assert {:name "NdisGetVersion"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2112} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2112} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMAllocateNetBufferSGList({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._NET_BUFFER"} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T.VOID"} x4: int, {:scalar} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562776(v=vs.85).aspx
	assert {:name "NdisMAllocateNetBufferSGList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2125} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2125} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMAllocateNetBufferSGList({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._NET_BUFFER"} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T.VOID"} x4: int, {:scalar} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562776(v=vs.85).aspx
	assert {:name "NdisMAllocateNetBufferSGList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2125} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2125} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMAllocateSharedMemory({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x3: int, {:pointer} {:ptr "Mem_T._LARGE_INTEGER"} {:ref "Mem_T._LARGE_INTEGER"} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562782(v=vs.85).aspx
	assert {:name "NdisMAllocateSharedMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2137} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2137} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMAllocateSharedMemory({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x3: int, {:pointer} {:ptr "Mem_T._LARGE_INTEGER"} {:ref "Mem_T._LARGE_INTEGER"} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562782(v=vs.85).aspx
	assert {:name "NdisMAllocateSharedMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2137} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2137} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMDeregisterInterruptEx({:pointer} {:ptr "Mem_T.VOID"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563575(v=vs.85).aspx
	assert {:name "NdisMDeregisterInterruptEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2145} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2145} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMDeregisterInterruptEx({:pointer} {:ptr "Mem_T.VOID"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563575(v=vs.85).aspx
	assert {:name "NdisMDeregisterInterruptEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2145} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2145} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMDeregisterMiniportDriver({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563578(v=vs.85).aspx
	assert {:name "NdisMDeregisterMiniportDriver"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2153} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2153} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMDeregisterMiniportDriver({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563578(v=vs.85).aspx
	assert {:name "NdisMDeregisterMiniportDriver"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2153} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2153} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMDeregisterScatterGatherDma({:pointer} {:ptr "Mem_T.VOID"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563581(v=vs.85).aspx
	assert {:name "NdisMDeregisterScatterGatherDma"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2161} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2161} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMDeregisterScatterGatherDma({:pointer} {:ptr "Mem_T.VOID"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563581(v=vs.85).aspx
	assert {:name "NdisMDeregisterScatterGatherDma"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2161} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2161} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMEnableVirtualization({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451481(v=vs.85).aspx
	assert {:name "NdisMEnableVirtualization"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2173} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2173} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMFreeNetBufferSGList({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._SCATTER_GATHER_LIST"} x1: int, {:pointer} {:ptr "Mem_T._NET_BUFFER"} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563586(v=vs.85).aspx
	assert {:name "NdisMFreeNetBufferSGList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2183} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2183} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMFreeNetBufferSGList({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._SCATTER_GATHER_LIST"} x1: int, {:pointer} {:ptr "Mem_T._NET_BUFFER"} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563586(v=vs.85).aspx
	assert {:name "NdisMFreeNetBufferSGList"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2183} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2183} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMFreeSharedMemory({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int, {:scalar} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563589(v=vs.85).aspx
	assert {:name "NdisMFreeSharedMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2195} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2195} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMFreeSharedMemory({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int, {:scalar} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563589(v=vs.85).aspx
	assert {:name "NdisMFreeSharedMemory"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2195} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2195} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMGetDeviceProperty({:pointer} x0: int, {:pointer} {:ref "Mem_T.P_DEVICE_OBJECT"} x1: int, {:pointer} {:ref "Mem_T.P_DEVICE_OBJECT"} x2: int, {:pointer} {:ref "Mem_T.P_DEVICE_OBJECT"} x3: int, {:pointer} {:ref "Mem_T.P_CM_RESOURCE_LIST"} x4: int, {:pointer} {:ref "Mem_T.P_CM_RESOURCE_LIST"} x5: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563592(v=vs.85).aspx
	assert {:name "NdisMGetDeviceProperty"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2208} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2208} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMGetDeviceProperty({:pointer} x0: int, {:pointer} {:ref "Mem_T.P_DEVICE_OBJECT"} x1: int, {:pointer} {:ref "Mem_T.P_DEVICE_OBJECT"} x2: int, {:pointer} {:ref "Mem_T.P_DEVICE_OBJECT"} x3: int, {:pointer} {:ref "Mem_T.P_CM_RESOURCE_LIST"} x4: int, {:pointer} {:ref "Mem_T.P_CM_RESOURCE_LIST"} x5: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563592(v=vs.85).aspx
	assert {:name "NdisMGetDeviceProperty"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2208} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2208} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMGetVirtualFunctionBusData({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:scalar} x3: int, {:scalar} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451484(v=vs.85).aspx
	assert {:name "NdisMGetVirtualFunctionBusData"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2220} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2220} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMGetVirtualFunctionLocation({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x2: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x3: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451487(v=vs.85).aspx
	assert {:name "NdisMGetVirtualFunctionLocation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2232} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2232} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMIndicateReceiveNetBufferLists({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563598(v=vs.85).aspx
	assert {:name "NdisMIndicateReceiveNetBufferLists"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2244} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2244} {:print "Return"} true;
	assert if((x4 mod 2) != 0) then irql_current == 2 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMIndicateReceiveNetBufferLists({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563598(v=vs.85).aspx
	assert {:name "NdisMIndicateReceiveNetBufferLists"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2244} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2244} {:print "Return"} true;
	assert if((x4 mod 2) != 0) then irql_current == 2 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMIndicateStatusEx({:pointer} x0: int, {:pointer} {:ref "Mem_T._NDIS_STATUS_INDICATION"} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563600(v=vs.85).aspx
	assert {:name "NdisMIndicateStatusEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2253} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2253} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMIndicateStatusEx({:pointer} x0: int, {:pointer} {:ref "Mem_T._NDIS_STATUS_INDICATION"} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563600(v=vs.85).aspx
	assert {:name "NdisMIndicateStatusEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2253} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2253} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMInvalidateConfigBlock({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451517(v=vs.85).aspx
	assert {:name "NdisMInvalidateConfigBlock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2263} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2263} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMMapIoSpace({:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563613(v=vs.85).aspx
	assert {:name "NdisMMapIoSpace"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2274} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2274} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMMapIoSpace({:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563613(v=vs.85).aspx
	assert {:name "NdisMMapIoSpace"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2274} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2274} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMPauseComplete({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563628(v=vs.85).aspx
	assert {:name "NdisMPauseComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2282} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2282} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMPauseComplete({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563628(v=vs.85).aspx
	assert {:name "NdisMPauseComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2282} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2282} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMQueryProbedBars({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T.INT4"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451520(v=vs.85).aspx
	assert {:name "NdisMQueryProbedBars"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2291} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2291} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMRegisterInterruptEx({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T._NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS"} {:ref "Mem_T._NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS"} x2: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563649(v=vs.85).aspx
	assert {:name "NdisMRegisterInterruptEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2302} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2302} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMRegisterInterruptEx({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T._NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS"} {:ref "Mem_T._NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS"} x2: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563649(v=vs.85).aspx
	assert {:name "NdisMRegisterInterruptEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2302} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2302} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMRegisterMiniportDriver({:pointer} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} {:ref "Mem_T._NDIS_MINIPORT_DRIVER_CHARACTERISTICS"} x3: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563654(v=vs.85).aspx
	assert {:name "NdisMRegisterMiniportDriver"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2314} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2314} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMRegisterMiniportDriver({:pointer} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} {:ref "Mem_T._NDIS_MINIPORT_DRIVER_CHARACTERISTICS"} x3: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563654(v=vs.85).aspx
	assert {:name "NdisMRegisterMiniportDriver"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2314} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2314} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMRegisterScatterGatherDma({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._NDIS_SG_DMA_DESCRIPTION"} {:ref "Mem_T._NDIS_SG_DMA_DESCRIPTION"} x1: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563659(v=vs.85).aspx
	assert {:name "NdisMRegisterScatterGatherDma"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2324} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2324} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMRegisterScatterGatherDma({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._NDIS_SG_DMA_DESCRIPTION"} {:ref "Mem_T._NDIS_SG_DMA_DESCRIPTION"} x1: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563659(v=vs.85).aspx
	assert {:name "NdisMRegisterScatterGatherDma"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2324} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2324} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMResetComplete({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563663(v=vs.85).aspx
	assert {:name "NdisMResetComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2334} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2334} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMResetComplete({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563663(v=vs.85).aspx
	assert {:name "NdisMResetComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2334} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2334} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMResetMiniport({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/jj647917(v=vs.85).aspx
	assert {:name "NdisMResetMiniport"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2342} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2342} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMRestartComplete({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563665(v=vs.85).aspx
	assert {:name "NdisMRestartComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2351} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2351} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMRestartComplete({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563665(v=vs.85).aspx
	assert {:name "NdisMRestartComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2351} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2351} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMSendNetBufferListsComplete({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563668(v=vs.85).aspx
	assert {:name "NdisMSendNetBufferListsComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2361} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2361} {:print "Return"} true;
	assert if((x2 mod 2) != 0) then irql_current == 2 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMSendNetBufferListsComplete({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563668(v=vs.85).aspx
	assert {:name "NdisMSendNetBufferListsComplete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2361} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2361} {:print "Return"} true;
	assert if((x2 mod 2) != 0) then irql_current == 2 else irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMSetMiniportAttributes({:pointer} x0: int, {:pointer} {:ref "Mem_T._NDIS_MINIPORT_ADAPTER_ATTRIBUTES"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563672(v=vs.85).aspx
	assert {:name "NdisMSetMiniportAttributes"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2370} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2370} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMSetMiniportAttributes({:pointer} x0: int, {:pointer} {:ref "Mem_T._NDIS_MINIPORT_ADAPTER_ATTRIBUTES"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563672(v=vs.85).aspx
	assert {:name "NdisMSetMiniportAttributes"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2370} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2370} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMSetVirtualFunctionBusData({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T.VOID"} x2: int, {:scalar} x3: int, {:scalar} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh451526(v=vs.85).aspx
	assert {:name "NdisMSetVirtualFunctionBusData"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2382} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2382} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisMSynchronizeWithInterruptEx({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563681(v=vs.85).aspx
	assert {:name "NdisMSynchronizeWithInterruptEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2393} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2393} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisMSynchronizeWithInterruptEx({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563681(v=vs.85).aspx
	assert {:name "NdisMSynchronizeWithInterruptEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2393} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2393} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisOpenConfigurationEx({:pointer} x0: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563717(v=vs.85).aspx
	assert {:name "NdisOpenConfigurationEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2402} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2402} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisOpenConfigurationEx({:pointer} x0: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563717(v=vs.85).aspx
	assert {:name "NdisOpenConfigurationEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2402} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2402} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisOpenConfigurationKeyByName({:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x2: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563725(v=vs.85).aspx
	assert {:name "NdisOpenConfigurationKeyByName"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2413} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2413} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisOpenConfigurationKeyByName({:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x2: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563725(v=vs.85).aspx
	assert {:name "NdisOpenConfigurationKeyByName"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2413} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2413} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisQueueIoWorkItem({:pointer} x0: int, {:scalar} x1: int, {:pointer} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563775(v=vs.85).aspx
	assert {:name "NdisQueueIoWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2423} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2423} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisQueueIoWorkItem({:pointer} x0: int, {:scalar} x1: int, {:pointer} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563775(v=vs.85).aspx
	assert {:name "NdisQueueIoWorkItem"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2423} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2423} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisReadConfiguration({:pointer} {:ref "Mem_T.VOID"} x0: int, {:pointer} {:ref "Mem_T.P_NDIS_CONFIGURATION_PARAMETER"} x1: int, {:pointer} x2: int, {:pointer} x3: int, {:scalar} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564511(v=vs.85).aspx
	assert {:name "NdisReadConfiguration"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2435} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2435} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisReadConfiguration({:pointer} {:ref "Mem_T.VOID"} x0: int, {:pointer} {:ref "Mem_T.P_NDIS_CONFIGURATION_PARAMETER"} x1: int, {:pointer} x2: int, {:pointer} x3: int, {:scalar} x4: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564511(v=vs.85).aspx
	assert {:name "NdisReadConfiguration"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2435} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2435} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisReadNetworkAddress({:pointer} {:ref "Mem_T.VOID"} x0: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x1: int, {:pointer} x2: int, {:pointer} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564512(v=vs.85).aspx
	assert {:name "NdisReadNetworkAddress"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2446} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2446} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisReadNetworkAddress({:pointer} {:ref "Mem_T.VOID"} x0: int, {:pointer} {:ref "Mem_T._SINGLE_LIST_ENTRY"} x1: int, {:pointer} x2: int, {:pointer} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564512(v=vs.85).aspx
	assert {:name "NdisReadNetworkAddress"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2446} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2446} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisResetEvent({:pointer} {:ref "Mem_T._NDIS_EVENT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564526(v=vs.85).aspx
	assert {:name "NdisResetEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2454} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2454} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisResetEvent({:pointer} {:ref "Mem_T._NDIS_EVENT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564526(v=vs.85).aspx
	assert {:name "NdisResetEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2454} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2454} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisSetCoalescableTimerObject({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:scalar} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564537(v=vs.85).aspx
	assert {:name "NdisSetCoalescableTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2466} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2466} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisSetEvent({:pointer} {:ref "Mem_T._NDIS_EVENT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564539(v=vs.85).aspx
	assert {:name "NdisSetEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2474} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2474} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisSetEvent({:pointer} {:ref "Mem_T._NDIS_EVENT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564539(v=vs.85).aspx
	assert {:name "NdisSetEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2474} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2474} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisSetOptionalHandlers({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._NDIS_DRIVER_OPTIONAL_HANDLERS"} {:ref "Mem_T._NDIS_DRIVER_OPTIONAL_HANDLERS"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564550(v=vs.85).aspx
	assert {:name "NdisSetOptionalHandlers"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2483} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2483} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisSetOptionalHandlers({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._NDIS_DRIVER_OPTIONAL_HANDLERS"} {:ref "Mem_T._NDIS_DRIVER_OPTIONAL_HANDLERS"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564550(v=vs.85).aspx
	assert {:name "NdisSetOptionalHandlers"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2483} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2483} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisSetTimerObject({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564563(v=vs.85).aspx
	assert {:name "NdisSetTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2494} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2494} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisSetTimerObject({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564563(v=vs.85).aspx
	assert {:name "NdisSetTimerObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2494} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2494} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisWaitEvent({:pointer} {:ref "Mem_T._NDIS_EVENT"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564651(v=vs.85).aspx
	assert {:name "NdisWaitEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2503} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2503} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisWaitEvent({:pointer} {:ref "Mem_T._NDIS_EVENT"} x0: int, {:scalar} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564651(v=vs.85).aspx
	assert {:name "NdisWaitEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2503} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2503} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisWriteConfiguration({:pointer} {:ref "Mem_T.VOID"} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564659(v=vs.85).aspx
	assert {:name "NdisWriteConfiguration"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2514} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2514} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisWriteConfiguration({:pointer} {:ref "Mem_T.VOID"} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} x3: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564659(v=vs.85).aspx
	assert {:name "NdisWriteConfiguration"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2514} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2514} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisWriteErrorLogEntry({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564663(v=vs.85).aspx
	assert {:name "NdisWriteErrorLogEntry"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2525} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2525} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} NdisWriteErrorLogEntry({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff564663(v=vs.85).aspx
	assert {:name "NdisWriteErrorLogEntry"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2525} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2525} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ObReferenceObjectByHandle({:pointer} x0: int, {:scalar} x1: int, {:pointer} x2: int, {:scalar} x3: int, {:pointer} {:ref "Mem_T.PVOID"} x4: int, {:pointer} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff558679(v=vs.85).aspx
	assert {:name "ObReferenceObjectByHandle"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2538} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2538} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ObReferenceObjectByPointer({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T._OBJECT_TYPE"} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff558686(v=vs.85).aspx
	assert {:name "ObReferenceObjectByPointer"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2549} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2549} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ObfDereferenceObject({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff557724(v=vs.85).aspx
	assert {:name "ObDereferenceObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2557} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2557} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ObfReferenceObject({:pointer} {:ptr "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff558678(v=vs.85).aspx
	assert {:name "ObReferenceObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2565} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2565} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PcAddAdapterDevice({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537683(v=vs.85).aspx
	assert {:name "PcAddAdapterDevice"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2577} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2577} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PcDispatchIrp({:pointer} x0: int, {:pointer} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537691(v=vs.85).aspx
	assert {:name "PcDispatchIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2586} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2586} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PcInitializeAdapterDriver({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537703(v=vs.85).aspx
	assert {:name "PcInitializeAdapterDriver"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2596} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2596} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PcNewMiniport({:pointer} {:ref "Mem_T.PIMiniport"} x0: int, {:pointer} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537714(v=vs.85).aspx
	assert {:name "PcNewMiniport"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2605} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2605} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PcNewPort({:pointer} {:ref "Mem_T.PIPort"} x0: int, {:pointer} {:ref "Mem_T._GUID"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537715(v=vs.85).aspx
	assert {:name "PcNewPort"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2614} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2614} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PcNewRegistryKey({:pointer} {:ref "Mem_T.PIRegistryKey"} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} x4: int, {:pointer} x5: int, {:pointer} x6: int, {:scalar} x7: int, {:pointer} x8: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537716(v=vs.85).aspx
	assert {:name "PcNewRegistryKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2630} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2630} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PcRegisterPhysicalConnection({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:scalar} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537726(v=vs.85).aspx
	assert {:name "PcRegisterPhysicalConnection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2642} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2642} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoCallDriver({:pointer} x0: int, {:pointer} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559654(v=vs.85).aspx
	assert {:name "PoCallDriver"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2651} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2651} {:print "Return"} true;
	assert irql_current == 0 || irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_PoFxCompleteIdleCondition({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406658(v=vs.85).aspx
	assert {:name "PoFxCompleteIdleCondition"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2660} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2660} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoFxCompleteIdleCondition({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406658(v=vs.85).aspx
	assert {:name "PoFxCompleteIdleCondition"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2660} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2660} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_PoFxCompleteIdleState({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406674(v=vs.85).aspx
	assert {:name "PoFxCompleteIdleState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2669} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2669} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoFxCompleteIdleState({:pointer} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406674(v=vs.85).aspx
	assert {:name "PoFxCompleteIdleState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2669} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2669} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_PoFxSetComponentLatency({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh439531(v=vs.85).aspx
	assert {:name "PoFxSetComponentLatency"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2679} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2679} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoFxSetComponentLatency({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh439531(v=vs.85).aspx
	assert {:name "PoFxSetComponentLatency"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2679} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2679} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_PoFxSetComponentResidency({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh439536(v=vs.85).aspx
	assert {:name "PoFxSetComponentResidency"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2689} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2689} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoFxSetComponentResidency({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh439536(v=vs.85).aspx
	assert {:name "PoFxSetComponentResidency"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2689} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2689} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoRegisterDeviceForIdleDetection({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559721(v=vs.85).aspx
	assert {:name "PoRegisterDeviceForIdleDetection"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2700} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2700} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoRegisterPowerSettingCallback({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int, {:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559727(v=vs.85).aspx
	assert {:name "PoRegisterPowerSettingCallback"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2712} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2712} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoRequestPowerIrp({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} x4: int, {:pointer} {:ref "Mem_T.PVOID"} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559734(v=vs.85).aspx
	assert {:name "PoRequestPowerIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2725} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2725} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoSetPowerState({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559765(v=vs.85).aspx
	assert {:name "PoSetPowerState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2735} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2735} {:print "Return"} true;
	assert if(x1 == 1 && x2 == 1) then irql_current <= 2 else irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoSetSystemState({:scalar} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559768(v=vs.85).aspx
	assert {:name "PoSetSystemState"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2743} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2743} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoStartNextPowerIrp({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559776(v=vs.85).aspx
	assert {:name "PoStartNextPowerIrp"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2751} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2751} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PoUnregisterPowerSettingCallback({:pointer} {:ptr "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559788(v=vs.85).aspx
	assert {:name "PoUnregisterPowerSettingCallback"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2759} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2759} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ProbeForRead({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559876(v=vs.85).aspx
	assert {:name "ProbeForRead"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2769} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2769} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ProbeForWrite({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-in/library/windows/hardware/ff559879(v=vs.85).aspx
	assert {:name "ProbeForWrite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2779} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2779} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} PsGetVersion({:pointer} {:ref "Mem_T.INT4"} x0: int, {:pointer} {:ref "Mem_T.INT4"} x1: int, {:pointer} {:ref "Mem_T.INT4"} x2: int, {:pointer} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff559941(v=vs.85).aspx
	assert {:name "PsGetVersion"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2790} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2790} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlAnsiStringToUnicodeString({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ref "Mem_T._STRING"} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561729(v=vs.85).aspx
	assert {:name "RtlAnsiStringToUnicodeString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2800} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2800} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlAppendUnicodeStringToString({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ref "Mem_T._UNICODE_STRING"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561736(v=vs.85).aspx
	assert {:name "RtlAppendUnicodeStringToString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2809} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2809} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlAppendUnicodeToString({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561738(v=vs.85).aspx
	assert {:name "RtlAppendUnicodeToString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2818} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2818} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlClearAllBits({:pointer} {:ptr "Mem_T._RTL_BITMAP"} {:ref "Mem_T._RTL_BITMAP"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561755(v=vs.85).aspx
	assert {:name "RtlClearAllBits"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2826} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2826} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlCompareUnicodeString({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ref "Mem_T._UNICODE_STRING"} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561782(v=vs.85).aspx
	assert {:name "RtlCompareUnicodeString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2836} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2836} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlCopySid({:scalar} x0: int, {:pointer} {:ref "Mem_T.VOID"} x1: int, {:pointer} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552146(v=vs.85).aspx
	assert {:name "RtlCopySid"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2846} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2846} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlCopyString({:pointer} {:ptr "Mem_T._STRING"} {:ref "Mem_T._STRING"} x0: int, {:pointer} {:ptr "Mem_T._STRING"} {:ref "Mem_T._STRING"} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561814(v=vs.85).aspx
	assert {:name "RtlCopyString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2855} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2855} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlCopyUnicodeString({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561817(v=vs.85).aspx
	assert {:name "RtlCopyUnicodeString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2864} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2864} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlDeleteRegistryValue({:scalar} x0: int, {:pointer} x1: int, {:pointer} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561829(v=vs.85).aspx
	assert {:name "RtlDeleteRegistryValue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2874} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2874} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlEqualString({:pointer} {:ptr "Mem_T._STRING"} {:ref "Mem_T._STRING"} x0: int, {:pointer} {:ptr "Mem_T._STRING"} {:ref "Mem_T._STRING"} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561852(v=vs.85).aspx
	assert {:name "RtlEqualString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2884} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2884} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlEqualUnicodeString({:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561854(v=vs.85).aspx
	assert {:name "RtlEqualUnicodeString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2894} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2894} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlFreeUnicodeString({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561903(v=vs.85).aspx
	assert {:name "RtlFreeUnicodeString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2902} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2902} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlGUIDFromString({:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561913(v=vs.85).aspx
	assert {:name "RtlGUIDFromString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2911} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2911} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlGetVersion({:pointer} {:ref "Mem_T._OSVERSIONINFOW"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561910(v=vs.85).aspx
	assert {:name "RtlGetVersion"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2919} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2919} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlInitAnsiString({:pointer} {:ref "Mem_T._STRING"} x0: int, {:pointer} {:ref "Mem_T.INT4"} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561918(v=vs.85).aspx
	assert {:name "RtlInitAnsiString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2928} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2928} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlInitUnicodeString({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:pointer} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561934(v=vs.85).aspx
	assert {:name "RtlInitUnicodeString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2937} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2937} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlInitializeBitMap({:pointer} {:ptr "Mem_T._RTL_BITMAP"} {:ref "Mem_T._RTL_BITMAP"} x0: int, {:pointer} {:ptr "Mem_T.INT4"} {:ref "Mem_T.INT4"} x1: int, {:scalar} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561925(v=vs.85).aspx
	assert {:name "RtlInitializeBitMap"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2947} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2947} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlIntegerToUnicodeString({:scalar} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff561941(v=vs.85).aspx
	assert {:name "RtlIntegerToUnicodeString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2957} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2957} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_RtlQueryRegistryValues({:scalar} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} x3: int, {:pointer} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562046(v=vs.85).aspx
	assert {:name "RtlQueryRegistryValues"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2969} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2969} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlQueryRegistryValues({:scalar} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} x3: int, {:pointer} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562046(v=vs.85).aspx
	assert {:name "RtlQueryRegistryValues"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2969} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2969} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlSetAllBits({:pointer} {:ptr "Mem_T._RTL_BITMAP"} {:ref "Mem_T._RTL_BITMAP"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562770(v=vs.85).aspx
	assert {:name "RtlSetAllBits"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2977} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2977} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlStringFromGUID({:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562871(v=vs.85).aspx
	assert {:name "RtlStringFromGUID"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2986} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2986} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlUnicodeStringToAnsiString({:pointer} {:ptr "Mem_T._STRING"} {:ref "Mem_T._STRING"} x0: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562969(v=vs.85).aspx
	assert {:name "RtlUnicodeStringToAnsiString"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2996} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 2996} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlUnicodeStringToInteger({:pointer} {:ref "Mem_T._UNICODE_STRING"} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T.VOID"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff562973(v=vs.85).aspx
	assert {:name "RtlUnicodeStringToInteger"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3006} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3006} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlVerifyVersionInfo({:pointer} {:ptr "Mem_T._OSVERSIONINFOEXW"} {:ref "Mem_T._OSVERSIONINFOEXW"} x0: int, {:scalar} x1: int, {:scalar} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563026(v=vs.85).aspx
	assert {:name "RtlVerifyVersionInfo"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3016} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3016} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlWriteRegistryValue({:scalar} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:scalar} x3: int, {:pointer} x4: int, {:scalar} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563034(v=vs.85).aspx
	assert {:name "RtlWriteRegistryValue"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3029} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3029} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} RtlxAnsiStringToUnicodeSize({:pointer} {:ref "Mem_T._STRING"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff563601(v=vs.85).aspx
	assert {:name "RtlxAnsiStringToUnicodeSize"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3037} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3037} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} SdBusOpenInterface({:pointer} x0: int, {:pointer} {:ref "Mem_T._SDBUS_INTERFACE_STANDARD"} x1: int, {:scalar} x2: int, {:scalar} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537906(v=vs.85).aspx
	assert {:name "SdBusOpenInterface"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3048} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3048} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} SdBusSubmitRequest({:pointer} x0: int, {:pointer} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff537909(v=vs.85).aspx
	assert {:name "SdBusSubmitRequest"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3057} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3057} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} SeCaptureSubjectContext({:pointer} {:ref "Mem_T._SECURITY_SUBJECT_CONTEXT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554792(v=vs.85).aspx
	assert {:name "SeCaptureSubjectContext"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3065} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3065} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} SeQueryInformationToken({:pointer} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T.PVOID"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-in/library/windows/hardware/ff556690(v=vs.85).aspx
	assert {:name "SeQueryInformationToken"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3075} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3075} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} SeReleaseSubjectContext({:pointer} {:ref "Mem_T._SECURITY_SUBJECT_CONTEXT"} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff556704(v=vs.85).aspx
	assert {:name "SeReleaseSubjectContext"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3083} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3083} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} TdiCopyBufferToMdlWithReservedMappingAtDpcLevel({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int);
}
-->
{
	// path:/minio/tdi/sys/tdi.c
	assert {:name "TdiCopyBufferToMdlWithReservedMappingAtDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3094} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3094} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_AssignUrbToIoStackLocation({:pointer} x0: int, {:pointer} x1: int, {:pointer} x2: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406228(v=vs.85).aspx
	assert {:name "USBD_AssignUrbToIoStackLocation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3103} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3103} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_CloseHandle({:pointer} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406248(v=vs.85).aspx
	assert {:name "USBD_CloseHandle"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3111} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3111} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_CreateConfigurationRequestEx({:pointer} x0: int, {:pointer} x1: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff539029(v=vs.85).aspx
	assert {:name "USBD_CreateConfigurationRequestEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3120} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3120} {:print "Return"} true;
	assert irql_current < 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_CreateHandle({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ref "Mem_T.PUSBD_HANDLE__"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406241(v=vs.85).aspx
	assert {:name "USBD_CreateHandle"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3132} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3132} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_ParseConfigurationDescriptorEx({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int, {:scalar} x5: int, {:scalar} x6: int) returns ({:pointer} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff539102(v=vs.85).aspx
	assert {:name "USBD_ParseConfigurationDescriptorEx"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3146} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3146} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_SelectConfigUrbAllocateAndBuild({:pointer} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} {:ref "Mem_T.P_URB"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406243(v=vs.85).aspx
	assert {:name "USBD_SelectConfigUrbAllocateAndBuild"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3157} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3157} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_SelectInterfaceUrbAllocateAndBuild({:pointer} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} {:ref "Mem_T.P_URB"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406245(v=vs.85).aspx
	assert {:name "USBD_SelectInterfaceUrbAllocateAndBuild"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3168} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3168} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_UrbAllocate({:pointer} x0: int, {:pointer} {:ref "Mem_T.P_URB"} x1: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406250(v=vs.85).aspx
	assert {:name "USBD_UrbAllocate"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3177} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3177} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} USBD_UrbFree({:pointer} x0: int, {:pointer} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/hh406252(v=vs.85).aspx
	assert {:name "USBD_UrbFree"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3186} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3186} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} WmiCompleteRequest({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:scalar} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff565798(v=vs.85).aspx
	assert {:name "WmiCompleteRequest"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3198} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3198} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} WmiFireEvent({:pointer} {:ptr "Mem_T._DEVICE_OBJECT"} x0: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T.VOID"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff565807(v=vs.85).aspx
	assert {:name "WmiFireEvent"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3210} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3210} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} WmiSystemControl({:pointer} {:ref "Mem_T._WMILIB_CONTEXT"} x0: int, {:pointer} x1: int, {:pointer} x2: int, {:pointer} {:ref "Mem_T.INT4"} x3: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff565834(v=vs.85).aspx
	assert {:name "WmiSystemControl"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3221} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3221} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwClose({:pointer} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566417(v=vs.85).aspx
	assert {:name "ZwClose"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3229} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3229} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwCreateDirectoryObject({:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T._OBJECT_ATTRIBUTES"} {:ref "Mem_T._OBJECT_ATTRIBUTES"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566421(v=vs.85).aspx
	assert {:name "ZwCreateDirectoryObject"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3239} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3239} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwCreateFile({:pointer} {:ref "Mem_T.PVOID"} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T._OBJECT_ATTRIBUTES"} x2: int, {:pointer} {:ref "Mem_T._IO_STATUS_BLOCK"} x3: int, {:pointer} x4: int, {:scalar} x5: int, {:scalar} x6: int, {:scalar} x7: int, {:scalar} x8: int, {:pointer} x9: int, {:scalar} x10: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566424(v=vs.85).aspx
	assert {:name "ZwCreateFile"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3257} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3257} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwCreateKey({:pointer} {:ptr "Mem_T.PVOID"} {:ref "Mem_T.PVOID"} x0: int, {:scalar} x1: int, {:pointer} {:ptr "Mem_T._OBJECT_ATTRIBUTES"} {:ref "Mem_T._OBJECT_ATTRIBUTES"} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} x4: int, {:scalar} x5: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x6: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566425(v=vs.85).aspx
	assert {:name "ZwCreateKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3271} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3271} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwDeleteKey({:pointer} {:ptr "Mem_T.VOID"} x0: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566437(v=vs.85).aspx
	assert {:name "ZwDeleteKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3279} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3279} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwEnumerateValueKey({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int, {:scalar} x4: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff566453(v=vs.85).aspx
	assert {:name "ZwEnumerateValueKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3292} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3292} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwOpenKey({:pointer} {:ref "Mem_T.PVOID"} x0: int, {:scalar} x1: int, {:pointer} {:ref "Mem_T._OBJECT_ATTRIBUTES"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff567014(v=vs.85).aspx
	assert {:name "ZwOpenKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3302} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3302} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwQueryValueKey({:pointer} x0: int, {:pointer} {:ref "Mem_T._UNICODE_STRING"} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:scalar} x4: int, {:pointer} {:ref "Mem_T.INT4"} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff567069(v=vs.85).aspx
	assert {:name "ZwQueryValueKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3315} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3315} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwReadFile({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:pointer} {:ref "Mem_T._IO_STATUS_BLOCK"} x4: int, {:pointer} x5: int, {:scalar} x6: int, {:pointer} {:ref "Mem_T._LARGE_INTEGER"} x7: int, {:pointer} x8: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff567072(v=vs.85).aspx
	assert {:name "ZwReadFile"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3331} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3331} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwSetValueKey({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:pointer} {:ptr "Mem_T._UNICODE_STRING"} {:ref "Mem_T._UNICODE_STRING"} x1: int, {:scalar} x2: int, {:scalar} x3: int, {:pointer} {:ptr "Mem_T.VOID"} {:ref "Mem_T.VOID"} x4: int, {:scalar} x5: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff567109(v=vs.85).aspx
	assert {:name "ZwSetValueKey"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3344} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3344} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} ZwWriteFile({:pointer} x0: int, {:pointer} x1: int, {:scalar} x2: int, {:pointer} x3: int, {:pointer} {:ref "Mem_T._IO_STATUS_BLOCK"} x4: int, {:pointer} x5: int, {:scalar} x6: int, {:pointer} {:ref "Mem_T._LARGE_INTEGER"} x7: int, {:pointer} x8: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff567121(v=vs.85).aspx
	assert {:name "ZwWriteFile"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3360} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3360} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} __PREfastPagedCode();
}
-->
{
	// path:/minkernel/ntos/inc/ntosdef_x.h ntosdef_x.h
	assert {:name "__PREfastPagedCode"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3368} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3368} {:print "Return"} true;
	assert irql_current <= 1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} imp_WppRecorderConfigure({:pointer} x0: int, {:pointer} {:ref "Mem_T._RECORDER_CONFIGURE_PARAMS"} x1: int);
}
-->
{
	// path:/onecoreuap/xbox/devices/drivers/GIP/unittest/GipUnit/lnm/pal.cpp
	assert {:name "imp_WppRecorderConfigure"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3378} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3378} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} imp_WppRecorderLogCreate({:pointer} x0: int, {:pointer} {:ref "Mem_T._RECORDER_LOG_CREATE_PARAMS"} x1: int, {:pointer} {:ref "Mem_T.PRECORDER_LOG__"} x2: int) returns ({:scalar} r: int);
}
-->
{
	// path:/minkernel/wdmlib/ifr/lib/km/WppRecorder.w
	assert {:name "imp_WppRecorderLogCreate"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3390} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3390} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} imp_WppRecorderLogDelete({:pointer} x0: int, {:pointer} x1: int);
}
-->
{
	// path:/minkernel/wdmlib/ifr/lib/km/WppRecorder.w
	assert {:name "imp_WppRecorderLogDelete"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3400} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3400} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} imp_WppRecorderLogGetDefault({:pointer} x0: int) returns ({:pointer} r: int);
}
-->
{
	// path:/minkernel/wdmlib/ifr/lib/km/WppRecorder.w
	assert {:name "imp_WppRecorderLogGetDefault"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3408} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3408} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} imp_WppRecorderReplay({:pointer} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:scalar} x3: int);
}
-->
{
	// path:/minkernel/wdmlib/ifr/lib/km/wppIfrReplay.c
	assert {:name "imp_WppRecorderReplay"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3422} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3422} {:print "Return"} true;
	assert irql_current == 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} vDbgPrintExWithPrefix({:pointer} {:ptr "Mem_T.VOID"} x0: int, {:scalar} x1: int, {:scalar} x2: int, {:pointer} {:ptr "Mem_T.VOID"} x3: int, {:pointer} {:ptr "Mem_T.VOID"} x4: int) returns ({:scalar} r: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff556076(v=vs.85).aspx
	assert {:name "vDbgPrintExWithPrefix"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3433} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3433} {:print "Return"} true;
	assert irql_current <= 2;
	return;
}


ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeRaiseIrql({:scalar} x0: int, {:pointer} {:ptr "PtrToInt_DummyMarker"} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553079(v=vs.85).aspx
	assert {:name "KeRaiseIrql"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1593} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1593} {:print "Return"} true;
	assert x0 >= irql_current; 
	PtrToInt_DummyMarker[x1] := irql_current;
	irql_current := x0;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeLowerIrql({:scalar} x0: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff552968(v=vs.85).aspx
	assert {:name "KeLowerIrql"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1581} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1581} {:print "Return"} true;
	irql_current := x0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeReleaseSpinLock({:pointer} {:ptr "Mem_T.INT4"} x0: int, {:scalar} x1: int);
}
-->
{
	// https://msdn.microsoft.com/en-us/library/windows/hardware/ff553145(v=vs.85).aspx
	assert {:name "KeReleaseSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1606} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 1606} {:print "Return"} true;
	irql_current := x1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoReleaseVpbSpinLock(x0: int);
}
-->
{
	assert {:name "IoReleaseVpbSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3442} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3442} {:print "Return"} true;
	irql_current := x0;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireInStackQueuedSpinLock(x0: int, x1: int);
}
-->
{
	assert {:name "KeAcquireInStackQueuedSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3453} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3453} {:print "Return"} true;
	assert irql_current <= 2;
	spinlockToIrqlMap[x0] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireInStackQueuedSpinLockAtDpcLevel(x0: int, x1: int);
}
-->
{
	assert {:name "KeAcquireInStackQueuedSpinLockAtDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3464} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3464} {:print "Return"} true;
	assert irql_current >= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireInStackQueuedSpinLockForDpc(x0: int, x1: int);
}
-->
{
	assert {:name "KeAcquireInStackQueuedSpinLockForDpc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3473} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3473} {:print "Return"} true;
	assert irql_current <= 2;
	spinlockToIrqlMap[x0] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireInterruptSpinLock(x0: int) returns (r: int);
}
-->
{
	assert {:name "KeAcquireInterruptSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3483} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3483} {:print "Return"} true;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireQueuedSpinLock(x0: int) returns (r: int);
}
-->
{
	assert {:name "KeAcquireQueuedSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3492} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3492} {:print "Return"} true;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireSpinLockForDpc(x0: int) returns (r: int);
}
-->
{
	assert {:name "KeAcquireSpinLockForDpc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3501} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3501} {:print "Return"} true;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeAcquireSpinLockRaiseToDpc(x0: int) returns (r: int);
}
-->
{
	assert {:name "KeAcquireSpinLockRaiseToDpc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3510} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3510} {:print "Return"} true;
	r := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseInStackQueuedSpinLock(x0: int);
}
-->
{
	assert {:name "KeReleaseInStackQueuedSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3519} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3519} {:print "Return"} true;
	assert irql_current == 2;
	
	irql_current := spinlockToIrqlMap[x0];
	assume 0 <= irql_current;
	assume irql_current <= 2;

	havoc spinlockTmp;
	spinlockToIrqlMap[x0] := spinlockTmp;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseInStackQueuedSpinLockForDpc(x0: int);
}
-->
{
	assert {:name "KeReleaseInStackQueuedSpinLockForDpc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3534} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3534} {:print "Return"} true;
	assert irql_current == 2;
	
	irql_current := spinlockToIrqlMap[x0];
	assume 0 <= irql_current;
	assume irql_current <= 2;

	havoc spinlockTmp;
	spinlockToIrqlMap[x0] := spinlockTmp;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseInStackQueuedSpinLockFromDpcLevel(x0: int);
}
-->
{
	assert {:name "KeReleaseInStackQueuedSpinLockFromDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3549} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3549} {:print "Return"} true;
	assert irql_current >= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseInterruptSpinLock(x0: int, x1: int);
}
-->
{
	assert {:name "KeReleaseInterruptSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3558} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3558} {:print "Return"} true;
	irql_current := x1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseQueuedSpinLock(x0: int, x1: int);
}
-->
{
	assert {:name "KeReleaseQueuedSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3567} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3567} {:print "Return"} true;
	irql_current := x1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeReleaseSpinLockForDpc(x0: int, x1: int);
}
-->
{
	assert {:name "KeReleaseSpinLockForDpc"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3576} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3576} {:print "Return"} true;
	irql_current := x1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} KeTryToAcquireQueuedSpinLock(x0: int, {:pointer} {:ptr "PtrToInt_DummyMarker"} x1: int) returns (r: int);
}
-->
{
	assert {:name "KeTryToAcquireQueuedSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3585} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3585} {:print "Return"} true;
	call choice := MakeChoice();
	r := if(choice == 0) then 0 else 1;
	PtrToInt_DummyMarker[x1] := if(choice == 0) then PtrToInt_DummyMarker[x1] else irql_current;
	irql_current := if(choice == 0) then irql_current else 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_ExAcquireSpinLock({:pointer} {:ptr "PtrToInt_DummyMarker"} x0: int);
}
-->
{
	assert {:name "sdv_ExAcquireSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3597} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3597} {:print "Return"} true;
	PtrToInt_DummyMarker[x0] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_ExReleaseSpinLock(x0: int, x1: int);
}
-->
{
	assert {:name "sdv_ExReleaseSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3607} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3607} {:print "Return"} true;
	irql_current := x1;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_IF_QUERY_OBJECT(x0: int, x1: int, x2: int, x3: int) returns (r: int);
}
-->
{
	assert {:name "sdv_IF_QUERY_OBJECT"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3618} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3618} {:print "Return"} true;
	irql_current := 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_IF_SET_OBJECT(x0: int, x1: int, x2: int, x3: int) returns (r: int);
}
-->
{
	assert {:name "sdv_IF_SET_OBJECT"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3629} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3629} {:print "Return"} true;
	irql_current := 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeAcquireSpinLock(x0: int, {:pointer} {:ptr "PtrToInt_DummyMarker"} x1: int);
}
-->
{
	assert {:name "sdv_KeAcquireSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3638} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3638} {:print "Return"} true;
	PtrToInt_DummyMarker[x1] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeAcquireSpinLockAtDpcLevel(x0: int);
}
-->
{
	assert {:name "sdv_KeAcquireSpinLockAtDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3647} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3647} {:print "Return"} true;
	assert irql_current >= 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeReleaseSpinLockFromDpcLevel(x0: int);
}
-->
{
	assert {:name "sdv_KeReleaseSpinLockFromDpcLevel"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3655} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3655} {:print "Return"} true;
	assert irql_current == 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAcquireReadWriteLock(x0: int, x1: int, x2: int);
}
-->
{
	assert {:name "sdv_NdisAcquireReadWriteLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3665} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3665} {:print "Return"} true;
	readWritelockToIrqlMap[x2] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAcquireRWLockRead(x0: int, x1: int, x2: int);
}
-->
{
	assert {:name "sdv_NdisAcquireRWLockRead"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3676} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3676} {:print "Return"} true;
	readWritelockToIrqlMap[x1] := irql_current;
	irql_current := if((x2 mod 2) == 0) then 2 else irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAcquireRWLockWrite(x0: int, x1: int, x2: int);
}
-->
{
	assert {:name "sdv_NdisAcquireRWLockWrite"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3687} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3687} {:print "Return"} true;
	readWritelockToIrqlMap[x1] := irql_current;
	irql_current := if((x2 mod 2) == 0) then 2 else irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisAcquireSpinLock(x0: int);
}
-->
{
	assert {:name "sdv_NdisAcquireSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3696} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3696} {:print "Return"} true;
	spinlockToIrqlMap[x0] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NDIS_IO_WORKITEM_FUNCTION(x0: int, x1: int);
}
-->
{
	assert {:name "sdv_NDIS_IO_WORKITEM_FUNCTION"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3705} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3705} {:print "Return"} true;
	irql_current := 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NDIS_LOWER_IRQL(x0: int, x1: int);
}
-->
{
	assert {:name "sdv_NDIS_LOWER_IRQL"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3714} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3714} {:print "Return"} true;
	irql_current := x0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NDIS_RAISE_IRQL_TO_DISPATCH({:pointer} {:ptr "PtrToInt_DummyMarker"} x0: int);
}
-->
{
	assert {:name "sdv_NDIS_RAISE_IRQL_TO_DISPATCH"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3722} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3722} {:print "Return"} true;
	PtrToInt_DummyMarker[x0] := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisReleaseReadWriteLock(x0: int, x1: int);
}
-->
{
	assert {:name "sdv_NdisReleaseReadWriteLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3732} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3732} {:print "Return"} true;
	assert irql_current == 2;
	
	irql_current := readWritelockToIrqlMap[x1];
	assume 0 <= irql_current;
	assume irql_current <= 2;

	havoc readWritelockTmp;
	readWritelockToIrqlMap[x1] := readWritelockTmp;

	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisReleaseRWLock(x0: int, x1: int);
}
-->
{
	assert {:name "sdv_NdisReleaseRWLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3749} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3749} {:print "Return"} true;
	irql_current := readWritelockToIrqlMap[x1];
	assume 0 <= irql_current;
	assume irql_current <= 2;

	havoc readWritelockTmp;
	readWritelockToIrqlMap[x1] := readWritelockTmp;

	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NdisReleaseSpinLock(x0: int);
}
-->
{
	assert {:name "sdv_NdisReleaseSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3763} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3763} {:print "Return"} true;
	assert irql_current == 2;
	
	irql_current := spinlockToIrqlMap[x0];
	assume 0 <= irql_current;
	assume irql_current <= 2;

	havoc spinlockTmp;
	spinlockToIrqlMap[x0] := spinlockTmp;

	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NDIS_TIMER_FUNCTION(x0: int, x1: int, x2: int, x3: int);
}
-->
{
	assert {:name "sdv_NDIS_TIMER_FUNCTION"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3782} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3782} {:print "Return"} true;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_StorPortAcquireSpinLock(x0: int, x1: int, x2: int, x3: int);
}
-->
{
	assert {:name "sdv_StorPortAcquireSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3794} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3794} {:print "Return"} true;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_StorPortReleaseSpinLock(x0: int, x1: int);
}
-->
{
	assert {:name "sdv_StorPortReleaseSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3802} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3802} {:print "Return"} true;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_dispatch_begin();
}
-->
{
	assert {:name "sdv_stub_dispatch_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3808} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3808} {:print "Return"} true;
	irql_current := 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_driver_control_begin();
}
-->
{
	assert {:name "sdv_stub_driver_control_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3814} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3814} {:print "Return"} true;
	driverControlTmp := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_driver_control_end();
}
-->
{
	assert {:name "sdv_stub_driver_control_end"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3821} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3821} {:print "Return"} true;
	irql_current := driverControlTmp;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	havoc driverControlTmp;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_io_completion_begin();
}
-->
{
	assert {:name "sdv_stub_io_completion_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3830} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3830} {:print "Return"} true;
	ioCompletionTmp := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_io_completion_end();
}
-->
{
	assert {:name "sdv_stub_io_completion_end"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3837} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3837} {:print "Return"} true;
	irql_current := ioCompletionTmp;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	havoc ioCompletionTmp;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_power_completion_begin();
}
-->
{
	assert {:name "sdv_stub_power_completion_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3846} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3846} {:print "Return"} true;
	call choice := MakeChoice();
	irql_current := if(choice == 0) then 0 else 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_power_runtime_begin();
}
-->
{
	assert {:name "sdv_stub_power_runtime_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3853} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3853} {:print "Return"} true;
	call choice := MakeChoice();
	irql_current := if(choice == 0) then 0 else 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_power_runtime_critical_begin();
}
-->
{
	assert {:name "sdv_stub_power_runtime_critical_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3860} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3860} {:print "Return"} true;
	call choice := MakeChoice();
	irql_current := if(choice == 0) then 0 else 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_startio_begin();
}
-->
{
	assert {:name "sdv_stub_startio_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3867} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3867} {:print "Return"} true;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_startio_end();
}
-->
{
	assert {:name "sdv_stub_startio_end"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3873} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3873} {:print "Return"} true;
	irql_current := 0;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_stub_unload_begin();
}
-->
{
	assert {:name "sdv_stub_unload_begin"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3879} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3879} {:print "Return"} true;
	irql_current := 0;
	return;
}


ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_StorPortAcquireMSISpinLock(x0: int, x1: int, {:pointer} {:ptr "PtrToInt_DummyMarker"} x2: int) returns (r: int);
}
-->
{
	assert {:name "sdv_StorPortAcquireMSISpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3890} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3890} {:print "Return"} true;
	call choice := MakeChoice();
	r := if(x0 == 0) then -1056964602 else if(choice == 0) then 0 else -1056964606;
	PtrToInt_DummyMarker[x2] := if(choice == 0) then irql_current else PtrToInt_DummyMarker[x2];
	irql_current := if(choice == 0) then 2 else irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_StorPortReleaseMSISpinLock(x0: int, x1: int, x2: int) returns (r: int);
}
-->
{
	assert {:name "sdv_StorPortReleaseMSISpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3903} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3903} {:print "Return"} true;
	r := if(x0 == 0) then -1056964602 else 0;
	irql_current := if(choice == 0) then x2 else irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_WdfInterruptAcquireLock(x0: int);
}
-->
{
	assert {:name "sdv_WdfInterruptAcquireLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3912} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3912} {:print "Return"} true;
	wdfInterruptTmp := irql_current;
	irql_current := 3;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_WdfInterruptReleaseLock(x0: int);
}
-->
{
	assert {:name "sdv_WdfInterruptReleaseLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3921} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3921} {:print "Return"} true;
	irql_current := wdfInterruptTmp;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	havoc wdfInterruptTmp;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_WdfSpinLockAcquire(x0: int);
}
-->
{
	assert {:name "sdv_WdfSpinLockAcquire"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3932} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3932} {:print "Return"} true;
	wdfSpinlockTmp := irql_current;
	irql_current := 2;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_WdfSpinLockRelease(x0: int);
}
-->
{
	assert {:name "sdv_WdfSpinLockRelease"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3941} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3941} {:print "Return"} true;
	irql_current := wdfSpinlockTmp;
	assume 0 <= irql_current;
	assume irql_current <= 31;
	havoc wdfSpinlockTmp;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} IoAcquireVpbSpinLock({:pointer} {:ptr "PtrToInt_DummyMarker"} x0: int);
}
-->
{
	assert {:name "IoAcquireVpbSpinLock"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3952} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3952} {:print "Return"} true;
	PtrToInt_DummyMarker[x0] := irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_KeGetCurrentIrql() returns (r: int);
}
-->
{
	assert {:name "sdv_KeGetCurrentIrql"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3958} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3958} {:print "Return"} true;
	r := irql_current;
	return;
}

ProcedureRule
{
	procedure {:#ReplaceImplementation} sdv_NDIS_CURRENT_IRQL() returns (r: int);
}
-->
{
	assert {:name "sdv_NDIS_CURRENT_IRQL"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3964} {:print "Atomic Continuation"} true;
	assert {:sourcefile "..\..\..\check\checkirql\checkirql.prop"} {:sourceline 3964} {:print "Return"} true;
	r := irql_current;
	return;
}
