// // Buggy function declarations // Copyright (c) Microsoft Corporation, 1999. // // Header: funs.h // Author: Silviu Calinoiu (SilviuC) // Created: 8/14/1999 2:52pm // // // PLEASE READ IF YOU MODIFY THIS FILE ! // // This header represents the communication mechanism between // the source code for the driver and the one for the user mode // controller of the driver. If you have a new operation to add // to the driver you have to fulfill the following steps: // // (1) Update the `IOCTL' section. // (2) Update the `Functions' section. // (3) Update the `Control' section. // #ifndef _FUNS_H_INCLUDED_ #define _FUNS_H_INCLUDED_ typedef VOID (* BUGGY_FUNCTION) (PVOID); typedef struct { ULONG Ioctl; LPCTSTR Message; LPCTSTR Command; BUGGY_FUNCTION Function; } BUGGY_IOCTL_HANDLER_INFORMATION; #ifndef FUNS_DEFINITION_MODULE extern BUGGY_IOCTL_HANDLER_INFORMATION BuggyFuns []; #else VOID DoNothing (PVOID NotUsed) {} // // IOCTL section // // In order to add a new IOCTL just declare it at the end of the section incrementing by // one the last TD_IOCTL declaration. // #define TD_IOCTL(n) CTL_CODE(FILE_DEVICE_UNKNOWN, (2048 + (n)), METHOD_BUFFERED, FILE_SPECIAL_ACCESS) #define IOCTL_TD_NOTHING TD_IOCTL(0) #define IOCTL_TD_BUGCHECK TD_IOCTL(1) #define IOCTL_TD_POOL_STRESS TD_IOCTL(2) #define IOCTL_TD_LOCK_SCENARIO TD_IOCTL(3) #define IOCTL_BGCHK_PROCESS_HAS_LOCKED_PAGES TD_IOCTL(4) #define IOCTL_BGCHK_NO_MORE_SYSTEM_PTES TD_IOCTL(5) #define IOCTL_BGCHK_BAD_POOL_HEADER TD_IOCTL(6) #define IOCTL_BGCHK_DRIVER_CORRUPTED_SYSTEM_PTES TD_IOCTL(7) #define IOCTL_BGCHK_DRIVER_CORRUPTED_EXPOOL TD_IOCTL(8) #define IOCTL_BGCHK_DRIVER_CORRUPTED_MMPOOL TD_IOCTL(9) #define IOCTL_TD_IRQL_NOT_LESS_OR_EQUAL TD_IOCTL(10) #define IOCTL_TD_PAGE_FAULT_BEYOND_END_OF_ALLOCATION TD_IOCTL(11) #define IOCTL_TD_DRIVER_VERIFIER_DETECTED_VIOLATION TD_IOCTL(12) #define IOCTL_TD_HANG_PROCESSOR TD_IOCTL(13) #define IOCTL_TD_CORRUPT_SYSPTES TD_IOCTL(14) #define IOCTL_TD_CONTIG_MEM_TEST TD_IOCTL(15) #define IOCTL_TD_SECTION_MAP_TEST_PROCESS_SPACE TD_IOCTL(16) #define IOCTL_TD_SECTION_MAP_TEST_SYSTEM_SPACE TD_IOCTL(17) #define IOCTL_TD_COMMONBUFFER_STRESS TD_IOCTL(18) #define IOCTL_TD_POOLFLAG_STRESS TD_IOCTL(19) #define IOCTL_TD_ALLOCPCONTIG_STRESS TD_IOCTL(20) #define IOCTL_TD_MMADDPMEM_STRESS TD_IOCTL(21) #define IOCTL_TD_MMDELPMEM_STRESS TD_IOCTL(22) #define IOCTL_TD_PMEM_SIMPLE_STRESS TD_IOCTL(23) #define IOCTL_TEST_TRACEDB TD_IOCTL(24) #define IOCTL_TD_MMPROBELOCKFOREVER_STRESS TD_IOCTL(25) #define IOCTL_TD_MMNAMETOADDR_STRESS TD_IOCTL(26) #define IOCTL_TD_MMECCBAD_STRESS TD_IOCTL(27) #define IOCTL_TD_MMMAPVSYSSPACE_LARGEST TD_IOCTL(28) #define IOCTL_TD_MMMAPVSYSSPACE_TOTAL TD_IOCTL(29) #define IOCTL_TD_MMMAPVSESSPACE_LARGEST TD_IOCTL(30) #define IOCTL_TD_MMMAPVSESSPACE_TOTAL TD_IOCTL(31) #define IOCTL_TD_SESSION_POOL_TEST TD_IOCTL(32) #define IOCTL_TD_DEADLOCK_MECHANISM_POSITIVE_TEST TD_IOCTL(33) #define IOCTL_TD_DEADLOCK_MECHANISM_NEGATIVE_TEST TD_IOCTL(34) #define IOCTL_TD_DEADLOCK_STRESS_TEST TD_IOCTL(35) #define IOCTL_TD_RESERVEDMAP_SET_SIZE TD_IOCTL(36) #define IOCTL_TD_RESERVEDMAP_READ_OP TD_IOCTL(37) #define IOCTL_TD_SYS_PAGED_POOL_MAX_SIZE TD_IOCTL(38) #define IOCTL_TD_SYS_PAGED_POOL_TOTAL_SIZE TD_IOCTL(39) #define IOCTL_TD_NONPAGED_POOL_MAX_SIZE TD_IOCTL(40) #define IOCTL_TD_NONPAGED_POOL_TOTAL_SIZE TD_IOCTL(41) #define IOCTL_TD_FREE_SYSTEM_PTES TD_IOCTL(42) #define IOCTL_TD_SESSION_POOL_MAX_SIZE TD_IOCTL(43) #define IOCTL_TD_SESSION_POOL_TOTAL_SIZE TD_IOCTL(44) #define IOCTL_TD_NONPAGEDPOOLMDLTEST_MAP TD_IOCTL(45) #define IOCTL_TD_NONPAGEDPOOLMDLTEST_UNMAP TD_IOCTL(46) #define IOCTL_TD_NEWSTUFF TD_IOCTL(47) // // Functions section // // For a new operation declare the name of the function called // when the new ioctl is dispatched to the driver. The declaration // is needed for the user mode driver controller. // #ifdef NO_BUGGY_FUNCTIONS #define BgChkForceCustomBugcheck DoNothing #define StressAllocateContiguousMemory DoNothing #define StressAllocateCommonBuffer DoNothing #define StressAddPhysicalMemory DoNothing #define StressDeletePhysicalMemory DoNothing #define StressPhysicalMemorySimple DoNothing #define StressPoolFlag DoNothing #define StressPoolTagTableExtension DoNothing #define StressLockScenario DoNothing #define BgChkProcessHasLockedPages DoNothing #define BgChkNoMoreSystemPtes DoNothing #define BgChkBadPoolHeader DoNothing #define BgChkDriverCorruptedSystemPtes DoNothing #define BgChkDriverCorruptedExPool DoNothing #define BgChkDriverCorruptedMmPool DoNothing #define BgChkIrqlNotLessOrEqual DoNothing #define BgChkPageFaultBeyondEndOfAllocation DoNothing #define BgChkDriverVerifierDetectedViolation DoNothing #define BgChkCorruptSystemPtes DoNothing #define BgChkHangCurrentProcessor DoNothing #define TdMmAllocateContiguousMemorySpecifyCacheTest DoNothing #define TdSectionMapTestProcessSpace DoNothing #define TdSectionMapTestSystemSpace DoNothing #define TestTraceDatabase DoNothing #define MmTestProbeLockForEverStress DoNothing #define MmTestNameToAddressStress DoNothing #define MmTestEccBadStress DoNothing #define MmMapViewInSystemSpaceLargest DoNothing #define MmMapViewInSystemSpaceTotal DoNothing #define MmMapViewInSessionSpaceLargest DoNothing #define MmMapViewInSessionSpaceTotal DoNothing #define SessionPoolTest DoNothing #define DeadlockPositiveTest DoNothing #define DeadlockNegativeTest DoNothing #define DeadlockStressTest DoNothing #define TdReservedMappingSetSize DoNothing #define TdReservedMappingDoRead DoNothing #define TdSysPagedPoolMaxTest DoNothing #define TdSysPagedPoolTotalTest DoNothing #define TdNonPagedPoolMaxTest DoNothing #define TdNonPagedPoolTotalTest DoNothing #define TdFreeSystemPtesTest DoNothing #define TdSessionPoolMaxTest DoNothing #define TdSessionPoolTotalTest DoNothing #define TdNonPagedPoolMdlTestMap DoNothing #define TdNonPagedPoolMdlTestUnMap DoNothing #define NewStuff DoNothing #endif // #ifdef NO_BUGGY_FUNCTIONS // // Control section // // For a new operation add a new structure at the end of // BuggyFuns vector (but before the null termination structure). // Each structure contains the following fields: // // - IOCTL code // - short help text displayed when user mode controller // prints help information // - command line option for user mode controller // - Driver function called when IOCTL gets dispatched // BUGGY_IOCTL_HANDLER_INFORMATION BuggyFuns [] = { {IOCTL_TD_NOTHING, TEXT("nothing"), TEXT ("/ioctlnothing"), DoNothing }, {IOCTL_TD_BUGCHECK, TEXT("custom bugcheck"), TEXT ("/ioctlbugcheck CODE PARAM1 PARAM2 PARAM3 PARAM4 (hex)"), BgChkForceCustomBugcheck }, {IOCTL_TD_ALLOCPCONTIG_STRESS, TEXT("allocate contiguous memory"), TEXT ("/ioctlmmalloccontig"), StressAllocateContiguousMemory }, {IOCTL_TD_COMMONBUFFER_STRESS, TEXT("allocate common buffer"), TEXT ("/ioctlcommonbuffer"), StressAllocateCommonBuffer }, {IOCTL_TD_MMADDPMEM_STRESS, TEXT("add physical memory"), TEXT ("/ioctladdpmem"), StressAddPhysicalMemory }, {IOCTL_TD_MMDELPMEM_STRESS, TEXT("delete physical memory"), TEXT ("/ioctldelpmem"), StressDeletePhysicalMemory }, {IOCTL_TD_PMEM_SIMPLE_STRESS, TEXT("physical memory simple stress"), TEXT ("/ioctlpmemsimplestress"), StressPhysicalMemorySimple }, {IOCTL_TD_POOLFLAG_STRESS, TEXT("pool flag"), TEXT ("/ioctlpoolflagstress"), StressPoolFlag }, {IOCTL_TD_POOL_STRESS, TEXT("pool tag table extension"), TEXT ("/ioctlpooltagstress"), StressPoolTagTableExtension }, {IOCTL_TD_LOCK_SCENARIO, TEXT("lock scenario"), TEXT ("/ioctllockscenario"), StressLockScenario }, {IOCTL_BGCHK_PROCESS_HAS_LOCKED_PAGES, TEXT("bgchk locked pages"), TEXT ("/bgchkprocesshaslockedpages"), BgChkProcessHasLockedPages}, {IOCTL_BGCHK_NO_MORE_SYSTEM_PTES, TEXT("bgchk no more syptes"), TEXT ("/bgchknomoresystemptes"), BgChkNoMoreSystemPtes}, {IOCTL_BGCHK_BAD_POOL_HEADER, TEXT("bgchk bad pool header"), TEXT ("/bgchkbadpoolheader"), BgChkBadPoolHeader}, {IOCTL_BGCHK_DRIVER_CORRUPTED_SYSTEM_PTES, TEXT("bgchk drv corrupted sysptes"), TEXT ("/bgchkdrivercorruptedsystemptes"), BgChkDriverCorruptedSystemPtes}, {IOCTL_BGCHK_DRIVER_CORRUPTED_EXPOOL, TEXT("bgchk drv corrupted expool"), TEXT ("/bgchkdrivercorruptedexpool"), BgChkDriverCorruptedExPool}, {IOCTL_BGCHK_DRIVER_CORRUPTED_MMPOOL, TEXT("bgchk drv corrupted mmpool"), TEXT ("/bgchkdrivercorruptedmmpool"), BgChkDriverCorruptedMmPool}, {IOCTL_TD_IRQL_NOT_LESS_OR_EQUAL, TEXT("bgchk irql not less or equal"), TEXT ("/bgchkirqlnotlessorequal"), BgChkIrqlNotLessOrEqual}, {IOCTL_TD_PAGE_FAULT_BEYOND_END_OF_ALLOCATION, TEXT("bgchk pgfault beyond allocation"), TEXT ("/bgchkpagefaultbeyondendofallocation"), BgChkPageFaultBeyondEndOfAllocation}, {IOCTL_TD_DRIVER_VERIFIER_DETECTED_VIOLATION, TEXT("bgchk drvvrf detected violation"), TEXT ("/bgchkdriververifierdetectedviolation"), BgChkDriverVerifierDetectedViolation}, {IOCTL_TD_CORRUPT_SYSPTES, TEXT("corrupt system ptes"), TEXT ("/corruptsysptes"), BgChkCorruptSystemPtes}, {IOCTL_TD_HANG_PROCESSOR, TEXT("hang processor"), TEXT ("/hangprocessor"), BgChkHangCurrentProcessor}, {IOCTL_TD_CONTIG_MEM_TEST, TEXT("contiguous memory specify cache"), TEXT ("/contigmemtest"), TdMmAllocateContiguousMemorySpecifyCacheTest}, {IOCTL_TD_SECTION_MAP_TEST_PROCESS_SPACE, TEXT("map test process space"), TEXT ("/sectionmaptest"), TdSectionMapTestProcessSpace}, {IOCTL_TD_SECTION_MAP_TEST_SYSTEM_SPACE, TEXT("map test system space"), TEXT ("/sectionmaptestsysspace"), TdSectionMapTestSystemSpace}, {IOCTL_TEST_TRACEDB, TEXT("test trace database"), TEXT ("/tracedb"), TestTraceDatabase}, {IOCTL_TD_MMPROBELOCKFOREVER_STRESS, TEXT("MmProbeAndLockForEver stress"), TEXT ("/ioctlprobelockforever"), MmTestProbeLockForEverStress}, {IOCTL_TD_MMNAMETOADDR_STRESS, TEXT("MmNameToAddress stress"), TEXT ("/ioctlnametoaddr"), MmTestNameToAddressStress}, {IOCTL_TD_MMECCBAD_STRESS, TEXT("MmEccBad bad stress"), TEXT ("/ioctleccbad"), MmTestEccBadStress}, {IOCTL_TD_MMECCBAD_STRESS, TEXT("MmEccBad good stress - not implemented!!!"), TEXT ("/ioctleccgood"), DoNothing}, {IOCTL_TD_MMMAPVSYSSPACE_LARGEST, TEXT("Determine the max size that can be mapped using MmMapViewInSystemSpace"), TEXT ("/mapviewsyslargest"), MmMapViewInSystemSpaceLargest}, {IOCTL_TD_MMMAPVSYSSPACE_TOTAL, TEXT("Determine the total amount of memory that can be mapped using MmMapViewInSystemSpace"), TEXT ("/mapviewsystotal"), MmMapViewInSystemSpaceTotal}, {IOCTL_TD_MMMAPVSESSPACE_LARGEST, TEXT("Determine the max size that can be mapped using MmMapViewInSessionSpace"), TEXT ("/mapviewseslargest"), MmMapViewInSessionSpaceLargest}, {IOCTL_TD_MMMAPVSESSPACE_TOTAL, TEXT("Determine the total amount of memory that can be mapped using MmMapViewInSessionSpace"), TEXT ("/mapviewsestotal"), MmMapViewInSessionSpaceTotal}, {IOCTL_TD_SESSION_POOL_TEST, TEXT("Determine the total amount of pool that can be allocated with SESSION_POOL_MASK flag"), TEXT ("/sessionpooltest"), SessionPoolTest }, {IOCTL_TD_DEADLOCK_MECHANISM_POSITIVE_TEST, TEXT("Test the deadlock detection mechanism without actually causing deadlocks"), TEXT ("/deadlockpositive"), DeadlockPositiveTest }, {IOCTL_TD_DEADLOCK_MECHANISM_NEGATIVE_TEST, TEXT("Test the deadlock detection mechanism by causing deadlocks"), TEXT ("/deadlocknegative"), DeadlockNegativeTest }, {IOCTL_TD_DEADLOCK_STRESS_TEST, TEXT("Stress test for the deadlock detection mechanism"), TEXT ("/deadlockstress"), DeadlockStressTest }, {IOCTL_TD_RESERVEDMAP_SET_SIZE, TEXT("Set the size of the reserved mapping address (MmMapLockedPagesWithReservedMapping tests)"), TEXT ("/ReservedMapSetSize"), TdReservedMappingSetSize }, {IOCTL_TD_RESERVEDMAP_READ_OP, TEXT("Execute a \"read\" (MmMapLockedPagesWithReservedMapping tests)"), TEXT ("/ReservedMapRead"), TdReservedMappingDoRead }, {IOCTL_TD_SYS_PAGED_POOL_MAX_SIZE, TEXT("Determine the maximum size of a block of paged pool currently available"), TEXT ("/SysPagedPoolMax"), TdSysPagedPoolMaxTest }, {IOCTL_TD_SYS_PAGED_POOL_TOTAL_SIZE, TEXT("Determine the total size of the paged pool currently available (64 Kb - 32 bytes blocks)"), TEXT ("/SysPagedPoolTotal"), TdSysPagedPoolTotalTest }, {IOCTL_TD_NONPAGED_POOL_MAX_SIZE, TEXT("Determine the maximum size of a block of non-paged pool currently available"), TEXT ("/NonPagedPoolMax"), TdNonPagedPoolMaxTest }, {IOCTL_TD_NONPAGED_POOL_TOTAL_SIZE, TEXT("Determine the total size of the non-paged pool currently available (64 Kb - 32 bytes blocks)"), TEXT ("/NonPagedPoolTotal"), TdNonPagedPoolTotalTest }, {IOCTL_TD_FREE_SYSTEM_PTES, TEXT("Determine the total amount of memory that can be mapped using system PTEs (1 Mb chunks)"), TEXT ("/FreeSystemPtes"), TdFreeSystemPtesTest }, {IOCTL_TD_SESSION_POOL_MAX_SIZE, TEXT("Determine the maximum size of a block of session pool currently available"), TEXT ("/SessionPoolMax"), TdSessionPoolMaxTest }, {IOCTL_TD_SESSION_POOL_TOTAL_SIZE, TEXT("Determine the total size of the session pool currently available (64 Kb - 32 bytes blocks)"), TEXT ("/SessionPoolTotal"), TdSessionPoolTotalTest }, {IOCTL_TD_NONPAGEDPOOLMDLTEST_MAP, TEXT("MmBuildMdlForNonPagedPoolMap"), TEXT ("/BuildMdlForNonPagedPoolTest"), TdNonPagedPoolMdlTestMap }, {IOCTL_TD_NONPAGEDPOOLMDLTEST_UNMAP, TEXT("MmBuildMdlForNonPagedPoolUnMap"), NULL, TdNonPagedPoolMdlTestUnMap }, {IOCTL_TD_NEWSTUFF, TEXT("new stuff ioctl"), TEXT ("/newstuff"), NewStuff}, {0, NULL, NULL, NULL} // termination }; #endif // #ifndef FUNS_DEFINITION_MODULE #endif // #ifndef _FUNS_H_INCLUDED_ // // End of header: funs.h //