diff --git a/drivers/filesystems/udfs/misc.cpp b/drivers/filesystems/udfs/misc.cpp index 75765fe90ce48..ecf704639aae9 100644 --- a/drivers/filesystems/udfs/misc.cpp +++ b/drivers/filesystems/udfs/misc.cpp @@ -188,7 +188,7 @@ UDFProcessException( } else if ((ExceptionCode == STATUS_VERIFY_REQUIRED) && FlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_TOP_LEVEL) && - KeAreAllApcsDisabled()) { + (KeGetCurrentIrql() >= APC_LEVEL)) { ExceptionCode = UDFFsdPostRequest(IrpContext, Irp); } diff --git a/drivers/filesystems/udfs/udffs.h b/drivers/filesystems/udfs/udffs.h index 272046b907e62..c52e5f8db9c88 100644 --- a/drivers/filesystems/udfs/udffs.h +++ b/drivers/filesystems/udfs/udffs.h @@ -91,6 +91,11 @@ typedef FILE_ID *PFILE_ID; #undef MdlMappingNoExecute #define MdlMappingNoExecute 0 #define NonPagedPoolNx NonPagedPool +// POOL_NX_ALLOCATION (0x200) is a Windows 8+ flag not recognized on XP-based +// systems. Passing it to ExInitialize*LookasideList would result in an invalid +// pool type on Windows XP / POSReady 2009. +#undef POOL_NX_ALLOCATION +#define POOL_NX_ALLOCATION 0 #endif // #define NDEBUG diff --git a/drivers/filesystems/udfs/udfinit.cpp b/drivers/filesystems/udfs/udfinit.cpp index 657034565142c..38248af9d2751 100644 --- a/drivers/filesystems/udfs/udfinit.cpp +++ b/drivers/filesystems/udfs/udfinit.cpp @@ -210,8 +210,11 @@ DriverEntry( FilterCallbacks.PreAcquireForSectionSynchronization = UDFFilterCallbackAcquireForCreateSection; RC = FsRtlRegisterFileSystemFilterCallbacks(DriverObject, &FilterCallbacks); - if (!NT_SUCCESS(RC)) - try_return(RC); + if (!NT_SUCCESS(RC)) { + // On Windows XP, this call may fail. Treat as non-fatal. + UDFPrint(("UDF: FsRtlRegisterFileSystemFilterCallbacks failed with %x, continuing\n", RC)); + RC = STATUS_SUCCESS; + } UDFPrint(("UDF: Create CD dev obj\n")); if (!NT_SUCCESS(RC = UDFCreateFsDeviceObject(UDF_FS_NAME_CD,