Skip to content

Commit 3fe5b8b

Browse files
DarkFire01mrmks04Extravert-irarcheYRHBelusca
authored
[SDK][WDF][USBDEX][NTOSKRNL_VISTA] Fully enable KMDF (reactos#8396)
[SDK][WDFLDR] Add kmdf loader driver [SDK][WDF] Add kmdf drver init static library [SDK][WDF] Modify kmdf driver for working with wdfldr driver [SDK][CDROM] Cdrom driver dynamically linking with kmdf [SDK][WDF] Add kmdfdriver module type [SDK][WDF][USBDEX][NTOSKRNL_VISTA] Fully enable KMDF [KMDF][WDFLDR][WDF01000] Fix Windows 10 Compatibility WDFLDR and WDF01000 [WDF01000] NO_KERNEL_LIST_ENTRY_CHECKS for wdf01000 3rd party code This PR is an accumulation of three peoples work, with the goal of the trying to get WDF to work like it should. This has been tested in combination with some extra NT6+ ntoskrnl against multiple drivers. --------- Co-authored-by: Max Korostil <[email protected]> Co-authored-by: Victor Perevertkin <[email protected]> Co-authored-by: Adam Słaboń <[email protected]> Co-authored-by: Hermès BÉLUSCA - MAÏTO <[email protected]>
1 parent 4207992 commit 3fe5b8b

File tree

129 files changed

+5595
-1506
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+5595
-1506
lines changed

boot/bootdata/hivesys.inf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,6 +1454,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders\SaslProfiles",,0x000000
14541454
HKLM,"SYSTEM\CurrentControlSet\Control\ServiceGroupOrder","List",0x00010000, \
14551455
"System Reserved", \
14561456
"EMS", \
1457+
"WdfLoadGroup", \
14571458
"Boot Bus Extender", \
14581459
"System Bus Extender", \
14591460
"SCSI Miniport", \

boot/bootdata/txtsetup.sif

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ wmilib.sys = 1,,,,,,,4,,,,1,4
135135
ksecdd.sys = 1,,,,,,,4,,,,1,4
136136
mountmgr.sys = 1,,,,,,x,4,,,,1,4
137137
partmgr.sys = 1,,,,,,x,4,,,,1,4
138+
wdfldr.sys = 1,,,,,,,4,,,,1,4
139+
wdf01000.sys = 1,,,,,,x,4,,,,1,4
138140

139141
[SourceDisksFiles.x86]
140142
acpi.sys = 1,,,,,,,4,1,,,1,4

drivers/storage/class/cdrom/CMakeLists.txt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ list(APPEND SOURCE
1818
cdrom.h)
1919

2020
add_library(cdrom MODULE ${SOURCE} cdrom.rc)
21-
set_module_type(cdrom kernelmodedriver)
21+
set_module_type(cdrom kmdfdriver)
2222

2323
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
2424
target_compile_options(cdrom PRIVATE -Wno-format -Wno-unused-variable -Wno-pointer-sign)
@@ -29,10 +29,11 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
2929
target_compile_options(cdrom PRIVATE -Wno-enum-conversion -Wno-tautological-constant-compare)
3030
endif()
3131

32-
target_compile_definitions(cdrom PRIVATE DEBUG_USE_KDPRINT)
32+
target_compile_definitions(cdrom PRIVATE DEBUG_USE_KDPRINT
33+
WDF_DEVICE_NO_WDMSEC_H _WIN32_WINNT=0x603 NTDDI_VERSION=0x06030000)
3334

34-
target_link_libraries(cdrom wdf01000 ntoskrnl_vista libcntpr ${PSEH_LIB})
35-
add_importlibs(cdrom ntoskrnl hal)
35+
target_link_libraries(cdrom ntoskrnl_vista libcntpr ${PSEH_LIB})
36+
add_importlibs(cdrom wdfldr ntoskrnl hal)
3637
# add_pch(cdrom cdrom.h SOURCE)
3738
add_cd_file(TARGET cdrom DESTINATION reactos/system32/drivers NO_CAB FOR all)
3839
add_registry_inf(cdrom_reg.inf)

ntoskrnl/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ set_module_type(ntoskrnl kernel)
4646

4747
source_group(TREE ${REACTOS_SOURCE_DIR}/ntoskrnl PREFIX "Source Files" FILES ${NTOSKRNL_SOURCE})
4848

49-
target_link_libraries(ntoskrnl cportlib csq ${PSEH_LIB} arbiter cmlib ntlsalib rtl ${ROSSYM_LIB} libcntpr setjmp wdmguid poguid ioevent)
49+
target_link_libraries(ntoskrnl ntoskrnl_vista cportlib csq ${PSEH_LIB} arbiter cmlib ntlsalib rtl ${ROSSYM_LIB} libcntpr setjmp wdmguid poguid ioevent)
5050

5151
if(STACK_PROTECTOR)
5252
target_sources(ntoskrnl PRIVATE $<TARGET_OBJECTS:gcc_ssp_nt>)

ntoskrnl/ntkrnlmp/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ if(STACK_PROTECTOR)
3737
target_sources(ntkrnlmp PRIVATE $<TARGET_OBJECTS:gcc_ssp_nt>)
3838
endif()
3939

40-
target_link_libraries(ntkrnlmp cportlib csq ${PSEH_LIB} arbiter cmlib ntlsalib rtl ${ROSSYM_LIB} libcntpr setjmp wdmguid poguid ioevent)
40+
target_link_libraries(ntkrnlmp ntoskrnl_vista cportlib csq ${PSEH_LIB} arbiter cmlib ntlsalib rtl ${ROSSYM_LIB} libcntpr setjmp wdmguid poguid ioevent)
4141
add_importlibs(ntkrnlmp hal kdcom bootvid)
4242
add_pch(ntkrnlmp ${REACTOS_SOURCE_DIR}/ntoskrnl/include/ntoskrnl.h "${NTKRNLMP_PCH_SKIP_SOURCE}")
4343
add_dependencies(ntkrnlmp psdk asm)

ntoskrnl/ntoskrnl.spec

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,16 @@
930930
@ stdcall PfxRemovePrefix(ptr ptr)
931931
@ stdcall PoCallDriver(ptr ptr)
932932
@ stdcall PoCancelDeviceNotify(ptr)
933+
@ stdcall -version=0x602+ PoFxActivateComponent(ptr long long)
934+
@ stdcall -version=0x602+ PoFxCompleteDevicePowerNotRequired(ptr)
935+
@ stdcall -version=0x602+ PoFxCompleteIdleCondition(ptr long)
936+
@ stdcall -version=0x602+ PoFxCompleteIdleState(ptr long)
937+
@ stdcall -version=0x602+ PoFxIdleComponent(ptr ptr long)
938+
@ stdcall -version=0x602+ PoFxRegisterDevice(ptr ptr ptr)
939+
@ stdcall -version=0x602+ PoFxReportDevicePoweredOn(ptr)
940+
@ stdcall -version=0x602+ PoFxSetDeviceIdleTimeout(ptr int64)
941+
@ stdcall -version=0x602+ PoFxStartDevicePowerManagement(ptr)
942+
@ stdcall -version=0x602+ PoFxUnregisterDevice(ptr)
933943
@ stdcall PoQueueShutdownWorkItem(ptr)
934944
@ stdcall PoRegisterDeviceForIdleDetection(ptr long long long)
935945
@ stdcall PoRegisterDeviceNotify(ptr long long long ptr ptr)

sdk/cmake/CMakeMacros.cmake

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -563,9 +563,9 @@ function(add_importlibs _module)
563563
endfunction()
564564

565565
# Some helper lists
566-
list(APPEND VALID_MODULE_TYPES kernel kerneldll kernelmodedriver wdmdriver nativecui nativedll win32cui win32gui win32dll win32ocx cpl module)
567-
list(APPEND KERNEL_MODULE_TYPES kernel kerneldll kernelmodedriver wdmdriver)
568-
list(APPEND NATIVE_MODULE_TYPES kernel kerneldll kernelmodedriver wdmdriver nativecui nativedll)
566+
list(APPEND VALID_MODULE_TYPES kernel kerneldll kernelmodedriver kmdfdriver wdmdriver nativecui nativedll win32cui win32gui win32dll win32ocx cpl module)
567+
list(APPEND KERNEL_MODULE_TYPES kernel kerneldll kernelmodedriver kmdfdriver wdmdriver)
568+
list(APPEND NATIVE_MODULE_TYPES kernel kerneldll kernelmodedriver kmdfdriver wdmdriver nativecui nativedll)
569569

570570
# Signs a driver if it is kernelmodedriver or wdmdriver if the cert exists
571571
function(sign_driver_if_needed TARGET)
@@ -656,6 +656,8 @@ function(set_module_type MODULE TYPE)
656656
set_entrypoint(${MODULE} DllMainCRTStartup 12)
657657
elseif((${TYPE} STREQUAL kernelmodedriver) OR (${TYPE} STREQUAL wdmdriver))
658658
set_entrypoint(${MODULE} DriverEntry 8)
659+
elseif(${TYPE} STREQUAL kmdfdriver)
660+
set_entrypoint(${MODULE} FxDriverEntry 8)
659661
elseif(${TYPE} STREQUAL nativedll)
660662
set_entrypoint(${MODULE} DllMain 12)
661663
elseif(TYPE STREQUAL kernel)
@@ -688,7 +690,9 @@ function(set_module_type MODULE TYPE)
688690
# Now do some stuff which is specific to each type
689691
if(TYPE IN_LIST KERNEL_MODULE_TYPES)
690692
add_dependencies(${MODULE} bugcodes xdk)
691-
if((${TYPE} STREQUAL kernelmodedriver) OR (${TYPE} STREQUAL wdmdriver))
693+
if((${TYPE} STREQUAL kernelmodedriver) OR
694+
(${TYPE} STREQUAL kmdfdriver) OR
695+
(${TYPE} STREQUAL wdmdriver))
692696
set_target_properties(${MODULE} PROPERTIES SUFFIX ".sys")
693697
sign_driver_if_needed(${MODULE})
694698
endif()
@@ -702,6 +706,12 @@ function(set_module_type MODULE TYPE)
702706
DEFINE_SYMBOL "")
703707
endif()
704708

709+
if(TYPE STREQUAL kmdfdriver)
710+
target_include_directories(${MODULE} PUBLIC ${REACTOS_SOURCE_DIR}/sdk/include/wdf/kmdf/1.17)
711+
add_importlibs(${MODULE} wdfldr)
712+
target_link_libraries(${MODULE} wdfdriverentry)
713+
endif()
714+
705715
if(${TYPE} STREQUAL win32ocx)
706716
set_target_properties(${MODULE} PROPERTIES SUFFIX ".ocx")
707717
endif()

sdk/cmake/gcc.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,11 @@ function(set_module_type_toolchain MODULE TYPE)
385385
-Wl,--major-image-version,5 -Wl,--minor-image-version,01 -Wl,--major-os-version,5 -Wl,--minor-os-version,01)
386386

387387
if(TYPE IN_LIST KERNEL_MODULE_TYPES)
388+
# "kmdfdriver" is treated the same way as "wdmdriver" in toolchain-specific set_module_type
389+
if(${TYPE} STREQUAL "kmdfdriver")
390+
set(TYPE "wdmdriver")
391+
endif()
392+
388393
target_link_options(${MODULE} PRIVATE -Wl,--exclude-all-symbols,-file-alignment=0x1000,-section-alignment=0x1000)
389394

390395
if(${TYPE} STREQUAL "wdmdriver")

sdk/include/ddk/usbdlib.h

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,75 @@ USBD_ValidateConfigurationDescriptor(
240240
_Out_ PUCHAR *Offset,
241241
_In_opt_ ULONG Tag);
242242

243+
/* UsbdEx lib */
244+
245+
_Must_inspect_result_
246+
_IRQL_requires_(PASSIVE_LEVEL)
247+
NTSTATUS
248+
USBD_QueryUsbCapability(
249+
_In_ USBD_HANDLE USBDHandle,
250+
_In_ const GUID* CapabilityType,
251+
_In_ ULONG OutputBufferLength,
252+
_When_(OutputBufferLength == 0, _Pre_null_)
253+
_When_(OutputBufferLength != 0 && ResultLength == NULL, _Out_writes_bytes_(OutputBufferLength))
254+
_When_(OutputBufferLength != 0 && ResultLength != NULL, _Out_writes_bytes_to_opt_(OutputBufferLength, *ResultLength))
255+
PUCHAR OutputBuffer,
256+
_Out_opt_
257+
_When_(ResultLength != NULL, _Deref_out_range_(<=,OutputBufferLength))
258+
PULONG ResultLength
259+
);
260+
261+
_IRQL_requires_max_(DISPATCH_LEVEL)
262+
VOID
263+
USBD_AssignUrbToIoStackLocation(
264+
_In_ USBD_HANDLE USBDHandle,
265+
_In_ PIO_STACK_LOCATION IoStackLocation,
266+
_In_ PURB Urb
267+
);
268+
269+
_Must_inspect_result_
270+
_IRQL_requires_(PASSIVE_LEVEL)
271+
NTSTATUS
272+
USBD_CreateHandle(
273+
_In_ PDEVICE_OBJECT DeviceObject,
274+
_In_ PDEVICE_OBJECT TargetDeviceObject,
275+
_In_ ULONG USBDClientContractVersion,
276+
_In_ ULONG PoolTag,
277+
_Out_ USBD_HANDLE *USBDHandle
278+
);
279+
280+
VOID
281+
USBD_CloseHandle(
282+
_In_ USBD_HANDLE USBDHandle
283+
);
284+
285+
_IRQL_requires_max_(DISPATCH_LEVEL)
286+
_Must_inspect_result_
287+
NTSTATUS
288+
USBD_UrbAllocate(
289+
_In_ USBD_HANDLE USBDHandle,
290+
_Outptr_result_bytebuffer_(sizeof(URB)) PURB *Urb
291+
);
292+
293+
_IRQL_requires_max_(DISPATCH_LEVEL)
294+
_Must_inspect_result_
295+
NTSTATUS
296+
USBD_IsochUrbAllocate(
297+
_In_ USBD_HANDLE USBDHandle,
298+
_In_ ULONG NumberOfIsochPacket,
299+
_Outptr_result_bytebuffer_(sizeof(struct _URB_ISOCH_TRANSFER)
300+
+ (NumberOfIsochPackets * sizeof(USBD_ISO_PACKET_DESCRIPTOR))
301+
- sizeof(USBD_ISO_PACKET_DESCRIPTOR))
302+
PURB *Urb
303+
);
304+
305+
_IRQL_requires_max_(DISPATCH_LEVEL)
306+
VOID
307+
USBD_UrbFree(
308+
_In_ USBD_HANDLE USBDHandle,
309+
_In_ PURB Urb
310+
);
311+
243312
#endif
244313

245314
#endif /* ! _USBD_ */

sdk/include/wdf/kmdf/1.17/wdf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ WDF_EXTERN_C_START
6565
//
6666
#define WdfFunctions WdfFunctions_01017
6767

68-
typedef VOID (*WDFFUNC) (VOID);
68+
typedef VOID (NTAPI *WDFFUNC) (VOID);
6969
extern const WDFFUNC *WdfFunctions;
7070
extern WDFFUNC WdfDriverMiniportUnloadOverride;
7171

0 commit comments

Comments
 (0)