ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
June 2020
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
20 participants
95 discussions
Start a n
N
ew thread
[reactos] 01/01: [NTOS:IO] Move device node functions from pnpmgr/pnpmgr.c to pnpmgr/devnode.c Add SAL2 annotations to functions while moving Convert IopCreateDeviceNode description to a Doxygen format
by Victor Perevertkin
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b5815efe83ba99eac8126…
commit b5815efe83ba99eac81269aa28e271bf935ec4fa Author: Victor Perevertkin <victor.perevertkin(a)reactos.org> AuthorDate: Fri Jun 19 23:55:40 2020 +0300 Commit: Victor Perevertkin <victor.perevertkin(a)reactos.org> CommitDate: Sun Jun 21 09:39:13 2020 +0300 [NTOS:IO] Move device node functions from pnpmgr/pnpmgr.c to pnpmgr/devnode.c Add SAL2 annotations to functions while moving Convert IopCreateDeviceNode description to a Doxygen format --- ntoskrnl/include/internal/io.h | 9 +- ntoskrnl/io/pnpmgr/devnode.c | 400 +++++++++++++++++++++++++++++++++++++++++ ntoskrnl/io/pnpmgr/pnpmgr.c | 384 +-------------------------------------- ntoskrnl/io/pnpmgr/pnpreport.c | 6 - ntoskrnl/ntos.cmake | 1 + 5 files changed, 410 insertions(+), 390 deletions(-) diff --git a/ntoskrnl/include/internal/io.h b/ntoskrnl/include/internal/io.h index d518e2e6ba9..3f801a0f647 100644 --- a/ntoskrnl/include/internal/io.h +++ b/ntoskrnl/include/internal/io.h @@ -762,6 +762,13 @@ NTSTATUS IopTraverseDeviceTree( PDEVICETREE_TRAVERSE_CONTEXT Context); +NTSTATUS +NTAPI +IopCreateDeviceKeyPath( + IN PCUNICODE_STRING RegistryPath, + IN ULONG CreateOptions, + OUT PHANDLE Handle); + // // PnP Routines // @@ -1391,7 +1398,7 @@ IoSetIoCompletion( IN PVOID ApcContext, IN NTSTATUS IoStatus, IN ULONG_PTR IoStatusInformation, - IN BOOLEAN Quota + IN BOOLEAN Quota ); // diff --git a/ntoskrnl/io/pnpmgr/devnode.c b/ntoskrnl/io/pnpmgr/devnode.c new file mode 100644 index 00000000000..6f5e029ceff --- /dev/null +++ b/ntoskrnl/io/pnpmgr/devnode.c @@ -0,0 +1,400 @@ +/* + * PROJECT: ReactOS Kernel + * LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later
) + * PURPOSE: PnP manager device tree functions + * COPYRIGHT: Casper S. Hornstrup (chorns(a)users.sourceforge.net) + * 2007 Hervé Poussineau (hpoussin(a)reactos.org) + * 2010-2012 Cameron Gutman (cameron.gutman(a)reactos.org) + */ + +/* INCLUDES ******************************************************************/ + +#include <ntoskrnl.h> +#define NDEBUG +#include <debug.h> + +/* GLOBALS *******************************************************************/ + +PDEVICE_NODE IopRootDeviceNode; +KSPIN_LOCK IopDeviceTreeLock; + +LONG IopNumberDeviceNodes; + +/* FUNCTIONS *****************************************************************/ + +PDEVICE_NODE +FASTCALL +IopGetDeviceNode( + _In_ PDEVICE_OBJECT DeviceObject) +{ + return ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode; +} + +PDEVICE_NODE +NTAPI +PipAllocateDeviceNode( + _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject) +{ + PDEVICE_NODE DeviceNode; + PAGED_CODE(); + + /* Allocate it */ + DeviceNode = ExAllocatePoolWithTag(NonPagedPool, sizeof(DEVICE_NODE), TAG_IO_DEVNODE); + if (!DeviceNode) return DeviceNode; + + /* Statistics */ + InterlockedIncrement(&IopNumberDeviceNodes); + + /* Set it up */ + RtlZeroMemory(DeviceNode, sizeof(DEVICE_NODE)); + DeviceNode->InterfaceType = InterfaceTypeUndefined; + DeviceNode->BusNumber = -1; + DeviceNode->ChildInterfaceType = InterfaceTypeUndefined; + DeviceNode->ChildBusNumber = -1; + DeviceNode->ChildBusTypeIndex = -1; +// KeInitializeEvent(&DeviceNode->EnumerationMutex, SynchronizationEvent, TRUE); + InitializeListHead(&DeviceNode->DeviceArbiterList); + InitializeListHead(&DeviceNode->DeviceTranslatorList); + InitializeListHead(&DeviceNode->TargetDeviceNotify); + InitializeListHead(&DeviceNode->DockInfo.ListEntry); + InitializeListHead(&DeviceNode->PendedSetInterfaceState); + + /* Check if there is a PDO */ + if (PhysicalDeviceObject) + { + /* Link it and remove the init flag */ + DeviceNode->PhysicalDeviceObject = PhysicalDeviceObject; + ((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = DeviceNode; + PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; + } + + /* Return the node */ + return DeviceNode; +} + +/** + * @brief Creates a device node + * + * @param[in] ParentNode Pointer to parent device node + * @param[in] PhysicalDeviceObject Pointer to PDO for device object. Pass NULL to have + * the root device node create one (eg. for legacy drivers) + * @param[in] ServiceName The service (driver) name for a node. Pass NULL + * to set UNKNOWN as a service + * @param[out] DeviceNode Pointer to storage for created device node + * + * @return Status, indicating the result of an operation + */ + +NTSTATUS +IopCreateDeviceNode( + _In_ PDEVICE_NODE ParentNode, + _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_opt_ PUNICODE_STRING ServiceName, + _Out_ PDEVICE_NODE *DeviceNode) +{ + PDEVICE_NODE Node; + NTSTATUS Status; + KIRQL OldIrql; + UNICODE_STRING FullServiceName; + UNICODE_STRING LegacyPrefix = RTL_CONSTANT_STRING(L"LEGACY_"); + UNICODE_STRING UnknownDeviceName = RTL_CONSTANT_STRING(L"UNKNOWN"); + UNICODE_STRING KeyName, ClassName; + PUNICODE_STRING ServiceName1; + ULONG LegacyValue; + UNICODE_STRING ClassGUID; + HANDLE InstanceHandle; + + DPRINT("ParentNode 0x%p PhysicalDeviceObject 0x%p ServiceName %wZ\n", + ParentNode, PhysicalDeviceObject, ServiceName); + + Node = ExAllocatePoolWithTag(NonPagedPool, sizeof(DEVICE_NODE), TAG_IO_DEVNODE); + if (!Node) + { + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlZeroMemory(Node, sizeof(DEVICE_NODE)); + + if (!ServiceName) + ServiceName1 = &UnknownDeviceName; + else + ServiceName1 = ServiceName; + + if (!PhysicalDeviceObject) + { + FullServiceName.MaximumLength = LegacyPrefix.Length + ServiceName1->Length + sizeof(UNICODE_NULL); + FullServiceName.Length = 0; + FullServiceName.Buffer = ExAllocatePool(PagedPool, FullServiceName.MaximumLength); + if (!FullServiceName.Buffer) + { + ExFreePoolWithTag(Node, TAG_IO_DEVNODE); + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlAppendUnicodeStringToString(&FullServiceName, &LegacyPrefix); + RtlAppendUnicodeStringToString(&FullServiceName, ServiceName1); + RtlUpcaseUnicodeString(&FullServiceName, &FullServiceName, FALSE); + + Status = PnpRootCreateDevice(&FullServiceName, NULL, &PhysicalDeviceObject, &Node->InstancePath); + if (!NT_SUCCESS(Status)) + { + DPRINT1("PnpRootCreateDevice() failed with status 0x%08X\n", Status); + ExFreePool(FullServiceName.Buffer); + ExFreePoolWithTag(Node, TAG_IO_DEVNODE); + return Status; + } + + /* Create the device key for legacy drivers */ + Status = IopCreateDeviceKeyPath(&Node->InstancePath, REG_OPTION_VOLATILE, &InstanceHandle); + if (!NT_SUCCESS(Status)) + { + ExFreePool(FullServiceName.Buffer); + ExFreePoolWithTag(Node, TAG_IO_DEVNODE); + return Status; + } + + Node->ServiceName.MaximumLength = ServiceName1->Length + sizeof(UNICODE_NULL); + Node->ServiceName.Length = 0; + Node->ServiceName.Buffer = ExAllocatePool(PagedPool, Node->ServiceName.MaximumLength); + if (!Node->ServiceName.Buffer) + { + ZwClose(InstanceHandle); + ExFreePool(FullServiceName.Buffer); + ExFreePoolWithTag(Node, TAG_IO_DEVNODE); + return Status; + } + + RtlCopyUnicodeString(&Node->ServiceName, ServiceName1); + + if (ServiceName) + { + RtlInitUnicodeString(&KeyName, L"Service"); + Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ServiceName->Buffer, ServiceName->Length + sizeof(UNICODE_NULL)); + } + + if (NT_SUCCESS(Status)) + { + RtlInitUnicodeString(&KeyName, L"Legacy"); + LegacyValue = 1; + Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_DWORD, &LegacyValue, sizeof(LegacyValue)); + + RtlInitUnicodeString(&KeyName, L"ConfigFlags"); + LegacyValue = 0; + ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_DWORD, &LegacyValue, sizeof(LegacyValue)); + + if (NT_SUCCESS(Status)) + { + RtlInitUnicodeString(&KeyName, L"Class"); + RtlInitUnicodeString(&ClassName, L"LegacyDriver"); + Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ClassName.Buffer, ClassName.Length + sizeof(UNICODE_NULL)); + if (NT_SUCCESS(Status)) + { + RtlInitUnicodeString(&KeyName, L"ClassGUID"); + RtlInitUnicodeString(&ClassGUID, L"{8ECC055D-047F-11D1-A537-0000F8753ED1}"); + Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ClassGUID.Buffer, ClassGUID.Length + sizeof(UNICODE_NULL)); + if (NT_SUCCESS(Status)) + { + // FIXME: Retrieve the real "description" by looking at the "DisplayName" string + // of the corresponding CurrentControlSet\Services\xxx entry for this driver. + RtlInitUnicodeString(&KeyName, L"DeviceDesc"); + Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ServiceName1->Buffer, ServiceName1->Length + sizeof(UNICODE_NULL)); + } + } + } + } + + ZwClose(InstanceHandle); + ExFreePool(FullServiceName.Buffer); + + if (!NT_SUCCESS(Status)) + { + ExFreePool(Node->ServiceName.Buffer); + ExFreePoolWithTag(Node, TAG_IO_DEVNODE); + return Status; + } + + IopDeviceNodeSetFlag(Node, DNF_LEGACY_DRIVER); + IopDeviceNodeSetFlag(Node, DNF_PROCESSED); + IopDeviceNodeSetFlag(Node, DNF_ADDED); + IopDeviceNodeSetFlag(Node, DNF_STARTED); + } + + Node->PhysicalDeviceObject = PhysicalDeviceObject; + + ((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = Node; + + if (ParentNode) + { + KeAcquireSpinLock(&IopDeviceTreeLock, &OldIrql); + Node->Parent = ParentNode; + Node->Sibling = NULL; + if (ParentNode->LastChild == NULL) + { + ParentNode->Child = Node; + ParentNode->LastChild = Node; + } + else + { + ParentNode->LastChild->Sibling = Node; + ParentNode->LastChild = Node; + } + KeReleaseSpinLock(&IopDeviceTreeLock, OldIrql); + Node->Level = ParentNode->Level + 1; + } + + PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; + + *DeviceNode = Node; + + return STATUS_SUCCESS; +} + +NTSTATUS +IopFreeDeviceNode( + _In_ PDEVICE_NODE DeviceNode) +{ + KIRQL OldIrql; + PDEVICE_NODE PrevSibling = NULL; + + /* All children must be deleted before a parent is deleted */ + ASSERT(!DeviceNode->Child); + ASSERT(DeviceNode->PhysicalDeviceObject); + + KeAcquireSpinLock(&IopDeviceTreeLock, &OldIrql); + + /* Get previous sibling */ + if (DeviceNode->Parent && DeviceNode->Parent->Child != DeviceNode) + { + PrevSibling = DeviceNode->Parent->Child; + while (PrevSibling->Sibling != DeviceNode) + PrevSibling = PrevSibling->Sibling; + } + + /* Unlink from parent if it exists */ + if (DeviceNode->Parent) + { + if (DeviceNode->Parent->LastChild == DeviceNode) + { + DeviceNode->Parent->LastChild = PrevSibling; + if (PrevSibling) + PrevSibling->Sibling = NULL; + } + if (DeviceNode->Parent->Child == DeviceNode) + DeviceNode->Parent->Child = DeviceNode->Sibling; + } + + /* Unlink from sibling list */ + if (PrevSibling) + PrevSibling->Sibling = DeviceNode->Sibling; + + KeReleaseSpinLock(&IopDeviceTreeLock, OldIrql); + + RtlFreeUnicodeString(&DeviceNode->InstancePath); + + RtlFreeUnicodeString(&DeviceNode->ServiceName); + + if (DeviceNode->ResourceList) + { + ExFreePool(DeviceNode->ResourceList); + } + + if (DeviceNode->ResourceListTranslated) + { + ExFreePool(DeviceNode->ResourceListTranslated); + } + + if (DeviceNode->ResourceRequirements) + { + ExFreePool(DeviceNode->ResourceRequirements); + } + + if (DeviceNode->BootResources) + { + ExFreePool(DeviceNode->BootResources); + } + + ((PEXTENDED_DEVOBJ_EXTENSION)DeviceNode->PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = NULL; + ExFreePoolWithTag(DeviceNode, TAG_IO_DEVNODE); + + return STATUS_SUCCESS; +} + +static +NTSTATUS +IopTraverseDeviceTreeNode( + _In_ PDEVICETREE_TRAVERSE_CONTEXT Context) +{ + PDEVICE_NODE ParentDeviceNode; + PDEVICE_NODE ChildDeviceNode; + PDEVICE_NODE NextDeviceNode; + NTSTATUS Status; + + /* Copy context data so we don't overwrite it in subsequent calls to this function */ + ParentDeviceNode = Context->DeviceNode; + + /* HACK: Keep a reference to the PDO so we can keep traversing the tree + * if the device is deleted. In a perfect world, children would have to be + * deleted before their parents, and we'd restart the traversal after + * deleting a device node. */ + ObReferenceObject(ParentDeviceNode->PhysicalDeviceObject); + + /* Call the action routine */ + Status = (Context->Action)(ParentDeviceNode, Context->Context); + if (!NT_SUCCESS(Status)) + { + ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject); + return Status; + } + + /* Traversal of all children nodes */ + for (ChildDeviceNode = ParentDeviceNode->Child; + ChildDeviceNode != NULL; + ChildDeviceNode = NextDeviceNode) + { + /* HACK: We need this reference to ensure we can get Sibling below. */ + ObReferenceObject(ChildDeviceNode->PhysicalDeviceObject); + + /* Pass the current device node to the action routine */ + Context->DeviceNode = ChildDeviceNode; + + Status = IopTraverseDeviceTreeNode(Context); + if (!NT_SUCCESS(Status)) + { + ObDereferenceObject(ChildDeviceNode->PhysicalDeviceObject); + ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject); + return Status; + } + + NextDeviceNode = ChildDeviceNode->Sibling; + ObDereferenceObject(ChildDeviceNode->PhysicalDeviceObject); + } + + ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject); + return Status; +} + +NTSTATUS +IopTraverseDeviceTree( + _In_ PDEVICETREE_TRAVERSE_CONTEXT Context) +{ + NTSTATUS Status; + + DPRINT("Context 0x%p\n", Context); + + DPRINT("IopTraverseDeviceTree(DeviceNode 0x%p FirstDeviceNode 0x%p Action %p Context 0x%p)\n", + Context->DeviceNode, Context->FirstDeviceNode, Context->Action, Context->Context); + + /* Start from the specified device node */ + Context->DeviceNode = Context->FirstDeviceNode; + + /* Recursively traverse the device tree */ + Status = IopTraverseDeviceTreeNode(Context); + if (Status == STATUS_UNSUCCESSFUL) + { + /* The action routine just wanted to terminate the traversal with status + code STATUS_SUCCESS */ + Status = STATUS_SUCCESS; + } + + return Status; +} diff --git a/ntoskrnl/io/pnpmgr/pnpmgr.c b/ntoskrnl/io/pnpmgr/pnpmgr.c index 48890364bf9..436e1376f9a 100644 --- a/ntoskrnl/io/pnpmgr/pnpmgr.c +++ b/ntoskrnl/io/pnpmgr/pnpmgr.c @@ -15,8 +15,6 @@ /* GLOBALS *******************************************************************/ -PDEVICE_NODE IopRootDeviceNode; -KSPIN_LOCK IopDeviceTreeLock; ERESOURCE PpRegistryDeviceResource; KGUARDED_MUTEX PpDeviceReferenceTableLock; RTL_AVL_TABLE PpDeviceReferenceTable; @@ -24,6 +22,7 @@ RTL_AVL_TABLE PpDeviceReferenceTable; extern ERESOURCE IopDriverLoadResource; extern ULONG ExpInitializationPhase; extern BOOLEAN PnpSystemInit; +extern PDEVICE_NODE IopRootDeviceNode; #define MAX_DEVICE_ID_LEN 200 #define MAX_SEPARATORS_INSTANCEID 0 @@ -40,12 +39,6 @@ KSPIN_LOCK IopDeviceActionLock; /* FUNCTIONS *****************************************************************/ -NTSTATUS -NTAPI -IopCreateDeviceKeyPath(IN PCUNICODE_STRING RegistryPath, - IN ULONG CreateOptions, - OUT PHANDLE Handle); - VOID IopCancelPrepareDeviceForRemoval(PDEVICE_OBJECT DeviceObject); @@ -55,13 +48,6 @@ IopPrepareDeviceForRemoval(PDEVICE_OBJECT DeviceObject, BOOLEAN Force); PDEVICE_OBJECT IopGetDeviceObjectFromDeviceInstance(PUNICODE_STRING DeviceInstance); -PDEVICE_NODE -FASTCALL -IopGetDeviceNode(PDEVICE_OBJECT DeviceObject) -{ - return ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode; -} - VOID IopFixupDeviceId(PWCHAR String) { @@ -1239,252 +1225,6 @@ Quickie: return FoundIndex; } -/* - * DESCRIPTION - * Creates a device node - * - * ARGUMENTS - * ParentNode = Pointer to parent device node - * PhysicalDeviceObject = Pointer to PDO for device object. Pass NULL - * to have the root device node create one - * (eg. for legacy drivers) - * DeviceNode = Pointer to storage for created device node - * - * RETURN VALUE - * Status - */ -NTSTATUS -IopCreateDeviceNode(PDEVICE_NODE ParentNode, - PDEVICE_OBJECT PhysicalDeviceObject, - PUNICODE_STRING ServiceName, - PDEVICE_NODE *DeviceNode) -{ - PDEVICE_NODE Node; - NTSTATUS Status; - KIRQL OldIrql; - UNICODE_STRING FullServiceName; - UNICODE_STRING LegacyPrefix = RTL_CONSTANT_STRING(L"LEGACY_"); - UNICODE_STRING UnknownDeviceName = RTL_CONSTANT_STRING(L"UNKNOWN"); - UNICODE_STRING KeyName, ClassName; - PUNICODE_STRING ServiceName1; - ULONG LegacyValue; - UNICODE_STRING ClassGUID; - HANDLE InstanceHandle; - - DPRINT("ParentNode 0x%p PhysicalDeviceObject 0x%p ServiceName %wZ\n", - ParentNode, PhysicalDeviceObject, ServiceName); - - Node = ExAllocatePoolWithTag(NonPagedPool, sizeof(DEVICE_NODE), TAG_IO_DEVNODE); - if (!Node) - { - return STATUS_INSUFFICIENT_RESOURCES; - } - - RtlZeroMemory(Node, sizeof(DEVICE_NODE)); - - if (!ServiceName) - ServiceName1 = &UnknownDeviceName; - else - ServiceName1 = ServiceName; - - if (!PhysicalDeviceObject) - { - FullServiceName.MaximumLength = LegacyPrefix.Length + ServiceName1->Length + sizeof(UNICODE_NULL); - FullServiceName.Length = 0; - FullServiceName.Buffer = ExAllocatePool(PagedPool, FullServiceName.MaximumLength); - if (!FullServiceName.Buffer) - { - ExFreePoolWithTag(Node, TAG_IO_DEVNODE); - return STATUS_INSUFFICIENT_RESOURCES; - } - - RtlAppendUnicodeStringToString(&FullServiceName, &LegacyPrefix); - RtlAppendUnicodeStringToString(&FullServiceName, ServiceName1); - RtlUpcaseUnicodeString(&FullServiceName, &FullServiceName, FALSE); - - Status = PnpRootCreateDevice(&FullServiceName, NULL, &PhysicalDeviceObject, &Node->InstancePath); - if (!NT_SUCCESS(Status)) - { - DPRINT1("PnpRootCreateDevice() failed with status 0x%08X\n", Status); - ExFreePool(FullServiceName.Buffer); - ExFreePoolWithTag(Node, TAG_IO_DEVNODE); - return Status; - } - - /* Create the device key for legacy drivers */ - Status = IopCreateDeviceKeyPath(&Node->InstancePath, REG_OPTION_VOLATILE, &InstanceHandle); - if (!NT_SUCCESS(Status)) - { - ExFreePool(FullServiceName.Buffer); - ExFreePoolWithTag(Node, TAG_IO_DEVNODE); - return Status; - } - - Node->ServiceName.MaximumLength = ServiceName1->Length + sizeof(UNICODE_NULL); - Node->ServiceName.Length = 0; - Node->ServiceName.Buffer = ExAllocatePool(PagedPool, Node->ServiceName.MaximumLength); - if (!Node->ServiceName.Buffer) - { - ZwClose(InstanceHandle); - ExFreePool(FullServiceName.Buffer); - ExFreePoolWithTag(Node, TAG_IO_DEVNODE); - return Status; - } - - RtlCopyUnicodeString(&Node->ServiceName, ServiceName1); - - if (ServiceName) - { - RtlInitUnicodeString(&KeyName, L"Service"); - Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ServiceName->Buffer, ServiceName->Length + sizeof(UNICODE_NULL)); - } - - if (NT_SUCCESS(Status)) - { - RtlInitUnicodeString(&KeyName, L"Legacy"); - LegacyValue = 1; - Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_DWORD, &LegacyValue, sizeof(LegacyValue)); - - RtlInitUnicodeString(&KeyName, L"ConfigFlags"); - LegacyValue = 0; - ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_DWORD, &LegacyValue, sizeof(LegacyValue)); - - if (NT_SUCCESS(Status)) - { - RtlInitUnicodeString(&KeyName, L"Class"); - RtlInitUnicodeString(&ClassName, L"LegacyDriver"); - Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ClassName.Buffer, ClassName.Length + sizeof(UNICODE_NULL)); - if (NT_SUCCESS(Status)) - { - RtlInitUnicodeString(&KeyName, L"ClassGUID"); - RtlInitUnicodeString(&ClassGUID, L"{8ECC055D-047F-11D1-A537-0000F8753ED1}"); - Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ClassGUID.Buffer, ClassGUID.Length + sizeof(UNICODE_NULL)); - if (NT_SUCCESS(Status)) - { - // FIXME: Retrieve the real "description" by looking at the "DisplayName" string - // of the corresponding CurrentControlSet\Services\xxx entry for this driver. - RtlInitUnicodeString(&KeyName, L"DeviceDesc"); - Status = ZwSetValueKey(InstanceHandle, &KeyName, 0, REG_SZ, ServiceName1->Buffer, ServiceName1->Length + sizeof(UNICODE_NULL)); - } - } - } - } - - ZwClose(InstanceHandle); - ExFreePool(FullServiceName.Buffer); - - if (!NT_SUCCESS(Status)) - { - ExFreePool(Node->ServiceName.Buffer); - ExFreePoolWithTag(Node, TAG_IO_DEVNODE); - return Status; - } - - IopDeviceNodeSetFlag(Node, DNF_LEGACY_DRIVER); - IopDeviceNodeSetFlag(Node, DNF_PROCESSED); - IopDeviceNodeSetFlag(Node, DNF_ADDED); - IopDeviceNodeSetFlag(Node, DNF_STARTED); - } - - Node->PhysicalDeviceObject = PhysicalDeviceObject; - - ((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = Node; - - if (ParentNode) - { - KeAcquireSpinLock(&IopDeviceTreeLock, &OldIrql); - Node->Parent = ParentNode; - Node->Sibling = NULL; - if (ParentNode->LastChild == NULL) - { - ParentNode->Child = Node; - ParentNode->LastChild = Node; - } - else - { - ParentNode->LastChild->Sibling = Node; - ParentNode->LastChild = Node; - } - KeReleaseSpinLock(&IopDeviceTreeLock, OldIrql); - Node->Level = ParentNode->Level + 1; - } - - PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; - - *DeviceNode = Node; - - return STATUS_SUCCESS; -} - -NTSTATUS -IopFreeDeviceNode(PDEVICE_NODE DeviceNode) -{ - KIRQL OldIrql; - PDEVICE_NODE PrevSibling = NULL; - - /* All children must be deleted before a parent is deleted */ - ASSERT(!DeviceNode->Child); - ASSERT(DeviceNode->PhysicalDeviceObject); - - KeAcquireSpinLock(&IopDeviceTreeLock, &OldIrql); - - /* Get previous sibling */ - if (DeviceNode->Parent && DeviceNode->Parent->Child != DeviceNode) - { - PrevSibling = DeviceNode->Parent->Child; - while (PrevSibling->Sibling != DeviceNode) - PrevSibling = PrevSibling->Sibling; - } - - /* Unlink from parent if it exists */ - if (DeviceNode->Parent) - { - if (DeviceNode->Parent->LastChild == DeviceNode) - { - DeviceNode->Parent->LastChild = PrevSibling; - if (PrevSibling) - PrevSibling->Sibling = NULL; - } - if (DeviceNode->Parent->Child == DeviceNode) - DeviceNode->Parent->Child = DeviceNode->Sibling; - } - - /* Unlink from sibling list */ - if (PrevSibling) - PrevSibling->Sibling = DeviceNode->Sibling; - - KeReleaseSpinLock(&IopDeviceTreeLock, OldIrql); - - RtlFreeUnicodeString(&DeviceNode->InstancePath); - - RtlFreeUnicodeString(&DeviceNode->ServiceName); - - if (DeviceNode->ResourceList) - { - ExFreePool(DeviceNode->ResourceList); - } - - if (DeviceNode->ResourceListTranslated) - { - ExFreePool(DeviceNode->ResourceListTranslated); - } - - if (DeviceNode->ResourceRequirements) - { - ExFreePool(DeviceNode->ResourceRequirements); - } - - if (DeviceNode->BootResources) - { - ExFreePool(DeviceNode->BootResources); - } - - ((PEXTENDED_DEVOBJ_EXTENSION)DeviceNode->PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = NULL; - ExFreePoolWithTag(DeviceNode, TAG_IO_DEVNODE); - - return STATUS_SUCCESS; -} - NTSTATUS NTAPI IopSynchronousCall(IN PDEVICE_OBJECT DeviceObject, @@ -1583,85 +1323,6 @@ IopInitiatePnpIrp(IN PDEVICE_OBJECT DeviceObject, return IoStatusBlock->Status; } -NTSTATUS -IopTraverseDeviceTreeNode(PDEVICETREE_TRAVERSE_CONTEXT Context) -{ - PDEVICE_NODE ParentDeviceNode; - PDEVICE_NODE ChildDeviceNode; - PDEVICE_NODE NextDeviceNode; - NTSTATUS Status; - - /* Copy context data so we don't overwrite it in subsequent calls to this function */ - ParentDeviceNode = Context->DeviceNode; - - /* HACK: Keep a reference to the PDO so we can keep traversing the tree - * if the device is deleted. In a perfect world, children would have to be - * deleted before their parents, and we'd restart the traversal after - * deleting a device node. */ - ObReferenceObject(ParentDeviceNode->PhysicalDeviceObject); - - /* Call the action routine */ - Status = (Context->Action)(ParentDeviceNode, Context->Context); - if (!NT_SUCCESS(Status)) - { - ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject); - return Status; - } - - /* Traversal of all children nodes */ - for (ChildDeviceNode = ParentDeviceNode->Child; - ChildDeviceNode != NULL; - ChildDeviceNode = NextDeviceNode) - { - /* HACK: We need this reference to ensure we can get Sibling below. */ - ObReferenceObject(ChildDeviceNode->PhysicalDeviceObject); - - /* Pass the current device node to the action routine */ - Context->DeviceNode = ChildDeviceNode; - - Status = IopTraverseDeviceTreeNode(Context); - if (!NT_SUCCESS(Status)) - { - ObDereferenceObject(ChildDeviceNode->PhysicalDeviceObject); - ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject); - return Status; - } - - NextDeviceNode = ChildDeviceNode->Sibling; - ObDereferenceObject(ChildDeviceNode->PhysicalDeviceObject); - } - - ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject); - return Status; -} - - -NTSTATUS -IopTraverseDeviceTree(PDEVICETREE_TRAVERSE_CONTEXT Context) -{ - NTSTATUS Status; - - DPRINT("Context 0x%p\n", Context); - - DPRINT("IopTraverseDeviceTree(DeviceNode 0x%p FirstDeviceNode 0x%p Action %p Context 0x%p)\n", - Context->DeviceNode, Context->FirstDeviceNode, Context->Action, Context->Context); - - /* Start from the specified device node */ - Context->DeviceNode = Context->FirstDeviceNode; - - /* Recursively traverse the device tree */ - Status = IopTraverseDeviceTreeNode(Context); - if (Status == STATUS_UNSUCCESSFUL) - { - /* The action routine just wanted to terminate the traversal with status - code STATUS_SUCCESS */ - Status = STATUS_SUCCESS; - } - - return Status; -} - - /* * IopCreateDeviceKeyPath * @@ -4038,49 +3699,6 @@ PpInitSystem(VOID) } } -LONG IopNumberDeviceNodes; - -PDEVICE_NODE -NTAPI -PipAllocateDeviceNode(IN PDEVICE_OBJECT PhysicalDeviceObject) -{ - PDEVICE_NODE DeviceNode; - PAGED_CODE(); - - /* Allocate it */ - DeviceNode = ExAllocatePoolWithTag(NonPagedPool, sizeof(DEVICE_NODE), TAG_IO_DEVNODE); - if (!DeviceNode) return DeviceNode; - - /* Statistics */ - InterlockedIncrement(&IopNumberDeviceNodes); - - /* Set it up */ - RtlZeroMemory(DeviceNode, sizeof(DEVICE_NODE)); - DeviceNode->InterfaceType = InterfaceTypeUndefined; - DeviceNode->BusNumber = -1; - DeviceNode->ChildInterfaceType = InterfaceTypeUndefined; - DeviceNode->ChildBusNumber = -1; - DeviceNode->ChildBusTypeIndex = -1; -// KeInitializeEvent(&DeviceNode->EnumerationMutex, SynchronizationEvent, TRUE); - InitializeListHead(&DeviceNode->DeviceArbiterList); - InitializeListHead(&DeviceNode->DeviceTranslatorList); - InitializeListHead(&DeviceNode->TargetDeviceNotify); - InitializeListHead(&DeviceNode->DockInfo.ListEntry); - InitializeListHead(&DeviceNode->PendedSetInterfaceState); - - /* Check if there is a PDO */ - if (PhysicalDeviceObject) - { - /* Link it and remove the init flag */ - DeviceNode->PhysicalDeviceObject = PhysicalDeviceObject; - ((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = DeviceNode; - PhysicalDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; - } - - /* Return the node */ - return DeviceNode; -} - /* PUBLIC FUNCTIONS **********************************************************/ NTSTATUS diff --git a/ntoskrnl/io/pnpmgr/pnpreport.c b/ntoskrnl/io/pnpmgr/pnpreport.c index a9a9b3fab68..b16f70afdc4 100644 --- a/ntoskrnl/io/pnpmgr/pnpreport.c +++ b/ntoskrnl/io/pnpmgr/pnpreport.c @@ -24,12 +24,6 @@ typedef struct _INTERNAL_WORK_QUEUE_ITEM PTARGET_DEVICE_CUSTOM_NOTIFICATION NotificationStructure; } INTERNAL_WORK_QUEUE_ITEM, *PINTERNAL_WORK_QUEUE_ITEM; -NTSTATUS -NTAPI -IopCreateDeviceKeyPath(IN PCUNICODE_STRING RegistryPath, - IN ULONG CreateOptions, - OUT PHANDLE Handle); - NTSTATUS IopSetDeviceInstanceData(HANDLE InstanceKey, PDEVICE_NODE DeviceNode); diff --git a/ntoskrnl/ntos.cmake b/ntoskrnl/ntos.cmake index b2224bed4c7..a938a42b783 100644 --- a/ntoskrnl/ntos.cmake +++ b/ntoskrnl/ntos.cmake @@ -152,6 +152,7 @@ list(APPEND SOURCE ${REACTOS_SOURCE_DIR}/ntoskrnl/io/iomgr/util.c ${REACTOS_SOURCE_DIR}/ntoskrnl/io/iomgr/volume.c ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/arbs.c + ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/devnode.c ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/plugplay.c ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/pnpdma.c ${REACTOS_SOURCE_DIR}/ntoskrnl/io/pnpmgr/pnpinit.c
4 years, 6 months
1
0
0
0
[reactos] 04/04: [FASTFAT_NEW] Simplify unsupported NT6.2+ workarounds
by Serge Gautherie
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ab2b7a6bc6ff71f712bac…
commit ab2b7a6bc6ff71f712bac8743d6ad8f9b2ea94f7 Author: Serge Gautherie <reactos-git_serge_171003(a)gautherie.fr> AuthorDate: Mon Jun 15 06:57:04 2020 +0200 Commit: Victor Perevertkin <victor(a)perevertkin.ru> CommitDate: Sun Jun 21 09:27:44 2020 +0300 [FASTFAT_NEW] Simplify unsupported NT6.2+ workarounds --- drivers/filesystems/fastfat_new/allocsup.c | 4 ---- drivers/filesystems/fastfat_new/deviosup.c | 20 -------------------- drivers/filesystems/fastfat_new/fatinit.c | 16 ---------------- drivers/filesystems/fastfat_new/fatprocs.h | 9 +++++++++ drivers/filesystems/fastfat_new/fsctrl.c | 24 ------------------------ drivers/filesystems/fastfat_new/read.c | 4 ---- drivers/filesystems/fastfat_new/strucsup.c | 21 --------------------- drivers/filesystems/fastfat_new/verfysup.c | 4 ---- drivers/filesystems/fastfat_new/write.c | 12 ------------ 9 files changed, 9 insertions(+), 105 deletions(-) diff --git a/drivers/filesystems/fastfat_new/allocsup.c b/drivers/filesystems/fastfat_new/allocsup.c index 883f758d682..4f7f8b20a43 100644 --- a/drivers/filesystems/fastfat_new/allocsup.c +++ b/drivers/filesystems/fastfat_new/allocsup.c @@ -2727,11 +2727,7 @@ Return Value: // Map the MDL. // -#ifndef __REACTOS__ Buffer = MmGetSystemAddressForMdlSafe(Mdl, HighPagePriority|MdlMappingNoExecute); -#else - Buffer = MmGetSystemAddressForMdlSafe(Mdl, HighPagePriority); -#endif if (!Buffer) { NT_ASSERT( FALSE ); ZeroingStatus = STATUS_INSUFFICIENT_RESOURCES; diff --git a/drivers/filesystems/fastfat_new/deviosup.c b/drivers/filesystems/fastfat_new/deviosup.c index a9535cf0de5..17462d8704b 100644 --- a/drivers/filesystems/fastfat_new/deviosup.c +++ b/drivers/filesystems/fastfat_new/deviosup.c @@ -1057,11 +1057,7 @@ Return Value: // that this will be only a single page. // -#ifndef __REACTOS__ if (MmGetSystemAddressForMdlSafe( Mdl, NormalPagePriority | MdlMappingNoExecute ) == NULL) { -#else - if (MmGetSystemAddressForMdlSafe( Mdl, NormalPagePriority ) == NULL) { -#endif FatRaiseStatus( IrpContext, STATUS_INSUFFICIENT_RESOURCES ); } @@ -1395,11 +1391,7 @@ Return Value: // Allocate the local buffer // -#ifndef __REACTOS__ DiskBuffer = FsRtlAllocatePoolWithTag( NonPagedPoolNxCacheAligned, -#else - DiskBuffer = FsRtlAllocatePoolWithTag( NonPagedPoolCacheAligned, -#endif (ULONG) ROUND_TO_PAGES( SectorSize ), TAG_IO_BUFFER ); @@ -2775,11 +2767,7 @@ Return Value: // If we can't get pool, oh well.... // -#ifndef __REACTOS__ Packet = ExAllocatePoolWithTag(NonPagedPoolNx, sizeof(CLEAN_AND_DIRTY_VOLUME_PACKET), ' taF'); -#else - Packet = ExAllocatePoolWithTag(NonPagedPool, sizeof(CLEAN_AND_DIRTY_VOLUME_PACKET), ' taF'); -#endif if ( Packet ) { @@ -3407,11 +3395,7 @@ Return Value: } else { -#ifndef __REACTOS__ PVOID Address = MmGetSystemAddressForMdlSafe( Irp->MdlAddress, NormalPagePriority | MdlMappingNoExecute ); -#else - PVOID Address = MmGetSystemAddressForMdlSafe( Irp->MdlAddress, NormalPagePriority ); -#endif if (Address == NULL) { @@ -3476,11 +3460,7 @@ Return Value: UserBuffer = FatMapUserBuffer( IrpContext, Irp ); -#ifndef __REACTOS__ Irp->AssociatedIrp.SystemBuffer = FsRtlAllocatePoolWithQuotaTag( NonPagedPoolNx, -#else - Irp->AssociatedIrp.SystemBuffer = FsRtlAllocatePoolWithQuotaTag( NonPagedPool, -#endif BufferLength, TAG_IO_USER_BUFFER ); diff --git a/drivers/filesystems/fastfat_new/fatinit.c b/drivers/filesystems/fastfat_new/fatinit.c index a752fbd2841..b09339640d5 100644 --- a/drivers/filesystems/fastfat_new/fatinit.c +++ b/drivers/filesystems/fastfat_new/fatinit.c @@ -264,11 +264,7 @@ Return Value: // Allocate the zero page // -#ifndef __REACTOS__ FatData.ZeroPage = ExAllocatePoolWithTag( NonPagedPoolNx, PAGE_SIZE, 'ZtaF' ); -#else - FatData.ZeroPage = ExAllocatePoolWithTag( NonPagedPool, PAGE_SIZE, 'ZtaF' ); -#endif if (FatData.ZeroPage == NULL) { IoDeleteDevice (FatDiskFileSystemDeviceObject); IoDeleteDevice (FatCdromFileSystemDeviceObject); @@ -388,11 +384,7 @@ Return Value: ExInitializeNPagedLookasideList( &FatIrpContextLookasideList, NULL, NULL, -#ifndef __REACTOS__ POOL_NX_ALLOCATION | POOL_RAISE_IF_ALLOCATION_FAILURE, -#else - POOL_RAISE_IF_ALLOCATION_FAILURE, -#endif sizeof(IRP_CONTEXT), TAG_IRP_CONTEXT, MaxDepth ); @@ -400,11 +392,7 @@ Return Value: ExInitializeNPagedLookasideList( &FatNonPagedFcbLookasideList, NULL, NULL, -#ifndef __REACTOS__ POOL_NX_ALLOCATION | POOL_RAISE_IF_ALLOCATION_FAILURE, -#else - POOL_RAISE_IF_ALLOCATION_FAILURE, -#endif sizeof(NON_PAGED_FCB), TAG_FCB_NONPAGED, MaxDepth ); @@ -412,11 +400,7 @@ Return Value: ExInitializeNPagedLookasideList( &FatEResourceLookasideList, NULL, NULL, -#ifndef __REACTOS__ POOL_NX_ALLOCATION | POOL_RAISE_IF_ALLOCATION_FAILURE, -#else - POOL_RAISE_IF_ALLOCATION_FAILURE, -#endif sizeof(ERESOURCE), TAG_ERESOURCE, MaxDepth ); diff --git a/drivers/filesystems/fastfat_new/fatprocs.h b/drivers/filesystems/fastfat_new/fatprocs.h index 90cc203d031..602f539cccb 100644 --- a/drivers/filesystems/fastfat_new/fatprocs.h +++ b/drivers/filesystems/fastfat_new/fatprocs.h @@ -40,6 +40,15 @@ Abstract: #ifdef __REACTOS__ +// Downgrade unsupported NT6.2+ features. +#undef MdlMappingNoExecute +#define MdlMappingNoExecute 0 +#define NonPagedPoolNx NonPagedPool +#define NonPagedPoolNxCacheAligned NonPagedPoolCacheAligned +#undef POOL_NX_ALLOCATION +#define POOL_NX_ALLOCATION 0 + +// Moved up: needed in 'fatstruc.h'. typedef enum _TYPE_OF_OPEN { UnopenedFileObject = 1, diff --git a/drivers/filesystems/fastfat_new/fsctrl.c b/drivers/filesystems/fastfat_new/fsctrl.c index ef78449b5d5..0938dcc63e9 100644 --- a/drivers/filesystems/fastfat_new/fsctrl.c +++ b/drivers/filesystems/fastfat_new/fsctrl.c @@ -2117,11 +2117,7 @@ Return Value: try_return( Status = STATUS_WRONG_VOLUME ); } -#ifndef __REACTOS__ BootSector = FsRtlAllocatePoolWithTag(NonPagedPoolNxCacheAligned, -#else - BootSector = FsRtlAllocatePoolWithTag(NonPagedPoolCacheAligned, -#endif (ULONG) ROUND_TO_PAGES( SectorSize ), TAG_VERIFY_BOOTSECTOR); @@ -2212,11 +2208,7 @@ Return Value: RootDirectorySize = FatBytesPerCluster(&Bpb); } -#ifndef __REACTOS__ RootDirectory = FsRtlAllocatePoolWithTag( NonPagedPoolNxCacheAligned, -#else - RootDirectory = FsRtlAllocatePoolWithTag( NonPagedPoolCacheAligned, -#endif (ULONG) ROUND_TO_PAGES( RootDirectorySize ), TAG_VERIFY_ROOTDIR); @@ -4009,11 +4001,7 @@ Return Value: } else if (Irp->MdlAddress != NULL) { -#ifndef __REACTOS__ VolumeState = MmGetSystemAddressForMdlSafe( Irp->MdlAddress, LowPagePriority | MdlMappingNoExecute ); -#else - VolumeState = MmGetSystemAddressForMdlSafe( Irp->MdlAddress, LowPagePriority ); -#endif if (VolumeState == NULL) { @@ -4829,11 +4817,7 @@ Return Value: try_leave( Status = STATUS_FILE_CORRUPT_ERROR); } -#ifndef __REACTOS__ *MappingPairs = FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - *MappingPairs = FsRtlAllocatePoolWithTag( NonPagedPool, -#endif (Index + 2) * (2 * sizeof(LARGE_INTEGER)), TAG_OUTPUT_MAPPINGPAIRS ); @@ -6087,11 +6071,7 @@ Return Value: if (Buffer == NULL) { -#ifndef __REACTOS__ Buffer = FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - Buffer = FsRtlAllocatePoolWithTag( NonPagedPool, -#endif BufferSize, TAG_DEFRAG_BUFFER ); } @@ -7979,11 +7959,7 @@ FatVerifyLookupFatEntry ( FatVerifyIndexIsValid( IrpContext, Vcb, FatIndex); -#ifndef __REACTOS__ Buffer = FsRtlAllocatePoolWithTag( NonPagedPoolNxCacheAligned, -#else - Buffer = FsRtlAllocatePoolWithTag( NonPagedPoolCacheAligned, -#endif PAGE_SIZE, TAG_ENTRY_LOOKUP_BUFFER ); diff --git a/drivers/filesystems/fastfat_new/read.c b/drivers/filesystems/fastfat_new/read.c index 95770aac934..48affe31142 100644 --- a/drivers/filesystems/fastfat_new/read.c +++ b/drivers/filesystems/fastfat_new/read.c @@ -685,11 +685,7 @@ Return Value: if (!Wait) { IrpContext->FatIoContext = -#ifndef __REACTOS__ FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof(FAT_IO_CONTEXT), TAG_FAT_IO_CONTEXT ); diff --git a/drivers/filesystems/fastfat_new/strucsup.c b/drivers/filesystems/fastfat_new/strucsup.c index 5cd50fe3348..4513be8dcb4 100644 --- a/drivers/filesystems/fastfat_new/strucsup.c +++ b/drivers/filesystems/fastfat_new/strucsup.c @@ -556,11 +556,7 @@ Return Value: // Initialize the performance counters. // -#ifndef __REACTOS__ Vcb->Statistics = FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - Vcb->Statistics = FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof(FILE_SYSTEM_STATISTICS) * FatData.NumberProcessors, TAG_VCB_STATS ); UnwindStatistics = Vcb->Statistics; @@ -579,11 +575,7 @@ Return Value: // of the storage stack on demand. // -#ifndef __REACTOS__ Vcb->SwapVpb = FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - Vcb->SwapVpb = FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof( VPB ), TAG_VPB ); @@ -1047,11 +1039,7 @@ Return Value: // have to continually reference through the Vcb // -#ifndef __REACTOS__ UnwindStorage[0] = Dcb = Vcb->RootDcb = FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - UnwindStorage[0] = Dcb = Vcb->RootDcb = FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof(DCB), TAG_FCB ); @@ -1144,11 +1132,7 @@ Return Value: // directory is a fixed size so we can set it everything up now. // -#ifndef __REACTOS__ FsRtlInitializeLargeMcb( &Dcb->Mcb, NonPagedPoolNx ); -#else - FsRtlInitializeLargeMcb( &Dcb->Mcb, NonPagedPool ); -#endif UnwindMcb = &Dcb->Mcb; if (FatIsFat32(Vcb)) { @@ -1333,13 +1317,8 @@ Return Value: if (IsPagingFile) { -#ifndef __REACTOS__ PoolType = NonPagedPoolNx; Fcb = UnwindStorage[0] = FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - PoolType = NonPagedPool; - Fcb = UnwindStorage[0] = FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof(FCB), TAG_FCB ); } else { diff --git a/drivers/filesystems/fastfat_new/verfysup.c b/drivers/filesystems/fastfat_new/verfysup.c index b40a1ebc697..969c332ab89 100644 --- a/drivers/filesystems/fastfat_new/verfysup.c +++ b/drivers/filesystems/fastfat_new/verfysup.c @@ -709,11 +709,7 @@ Return Value: // If we couldn't get pool, oh well.... // -#ifndef __REACTOS__ Packet = ExAllocatePoolWithTag(NonPagedPoolNx, sizeof(CLEAN_AND_DIRTY_VOLUME_PACKET), ' taF'); -#else - Packet = ExAllocatePoolWithTag(NonPagedPool, sizeof(CLEAN_AND_DIRTY_VOLUME_PACKET), ' taF'); -#endif if ( Packet ) { diff --git a/drivers/filesystems/fastfat_new/write.c b/drivers/filesystems/fastfat_new/write.c index cf75c213958..60109d76261 100644 --- a/drivers/filesystems/fastfat_new/write.c +++ b/drivers/filesystems/fastfat_new/write.c @@ -447,11 +447,7 @@ Return Value: if (!Wait) { IrpContext->FatIoContext = -#ifndef __REACTOS__ FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof(FAT_IO_CONTEXT), TAG_FAT_IO_CONTEXT ); @@ -1662,11 +1658,7 @@ Return Value: if (!FcbOrDcb->NonPaged->OutstandingAsyncEvent) { FcbOrDcb->NonPaged->OutstandingAsyncEvent = -#ifndef __REACTOS__ FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof(KEVENT), TAG_EVENT ); @@ -2420,11 +2412,7 @@ Return Value: // Get pool and initialize the timer and DPC // -#ifndef __REACTOS__ FlushContext = FsRtlAllocatePoolWithTag( NonPagedPoolNx, -#else - FlushContext = FsRtlAllocatePoolWithTag( NonPagedPool, -#endif sizeof(DEFERRED_FLUSH_CONTEXT), TAG_DEFERRED_FLUSH_CONTEXT );
4 years, 6 months
1
0
0
0
[reactos] 03/04: [FASTFAT_NEW] Remove obsolete compiler workarounds
by Serge Gautherie
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1ceed5ad5ad8904731a11…
commit 1ceed5ad5ad8904731a11f87719e396a6bc33335 Author: Serge Gautherie <reactos-git_serge_171003(a)gautherie.fr> AuthorDate: Mon Jun 15 06:57:04 2020 +0200 Commit: Victor Perevertkin <victor(a)perevertkin.ru> CommitDate: Sun Jun 21 09:27:44 2020 +0300 [FASTFAT_NEW] Remove obsolete compiler workarounds following upgrade to GCC 8.4 and MSVC 2015. --- drivers/filesystems/fastfat_new/create.c | 40 ------------------------------ drivers/filesystems/fastfat_new/dirsup.c | 8 ------ drivers/filesystems/fastfat_new/fileinfo.c | 16 ------------ drivers/filesystems/fastfat_new/fsctrl.c | 8 ------ drivers/filesystems/fastfat_new/read.c | 4 --- drivers/filesystems/fastfat_new/strucsup.c | 8 ------ drivers/filesystems/fastfat_new/write.c | 4 --- 7 files changed, 88 deletions(-) diff --git a/drivers/filesystems/fastfat_new/create.c b/drivers/filesystems/fastfat_new/create.c index 7210d362c0f..97b0c8b120c 100644 --- a/drivers/filesystems/fastfat_new/create.c +++ b/drivers/filesystems/fastfat_new/create.c @@ -573,11 +573,7 @@ Return Value: { NTSTATUS Status; -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif PIO_STACK_LOCATION IrpSp; PFILE_OBJECT FileObject; @@ -2624,11 +2620,7 @@ Arguments: { PDCB RootDcb; -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif // // The following variables are for abnormal termination @@ -2814,11 +2806,7 @@ Return Value: --*/ { -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif PBCB DirentBcb = NULL; PDIRENT Dirent; @@ -3261,11 +3249,7 @@ Return Value: --*/ { -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif PBCB DirentBcb = NULL; PDIRENT Dirent; @@ -3974,11 +3958,7 @@ Return Value: --*/ { -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif // // The following variables are for abnormal termination @@ -4222,11 +4202,7 @@ Return Value: --*/ { -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif // // The following variables are for abnormal termination @@ -4522,11 +4498,7 @@ Return Value: --*/ { -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif ACCESS_MASK AddedAccess = 0; @@ -5711,11 +5683,7 @@ Return Value: --*/ { -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif PFCB Fcb = NULL; @@ -6428,11 +6396,7 @@ Return Value: --*/ { -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif PDIRENT Dirent; PBCB DirentBcb; @@ -6445,11 +6409,7 @@ Return Value: ULONG NotifyFilter; ULONG HeaderSize = 0; -#ifndef __REACTOS__ LARGE_INTEGER AllocSize = {0}; -#else - LARGE_INTEGER AllocSize = {{0}}; -#endif // // The following variables are for abnormal termination diff --git a/drivers/filesystems/fastfat_new/dirsup.c b/drivers/filesystems/fastfat_new/dirsup.c index b94f2c2fc28..8c3bccdb9fd 100644 --- a/drivers/filesystems/fastfat_new/dirsup.c +++ b/drivers/filesystems/fastfat_new/dirsup.c @@ -2633,18 +2633,10 @@ Return Value: PDIRENT Dirent; PBCB DirentBcb = NULL; ULONG NotifyFilter = 0; -#ifndef __REACTOS__ FAT_TIME_STAMP CurrentFatTime = {0}; -#else - FAT_TIME_STAMP CurrentFatTime = {{0}}; -#endif LARGE_INTEGER CurrentTime; -#ifndef __REACTOS__ LARGE_INTEGER CurrentDay = {0}; -#else - LARGE_INTEGER CurrentDay = {{0}}; -#endif LARGE_INTEGER LastAccessDay; PAGED_CODE(); diff --git a/drivers/filesystems/fastfat_new/fileinfo.c b/drivers/filesystems/fastfat_new/fileinfo.c index f2a06205ef8..fc37f7cf25e 100644 --- a/drivers/filesystems/fastfat_new/fileinfo.c +++ b/drivers/filesystems/fastfat_new/fileinfo.c @@ -1949,21 +1949,11 @@ Return Value: PDIRENT Dirent; PBCB DirentBcb; -#ifndef __REACTOS__ FAT_TIME_STAMP CreationTime = {0}; -#else - FAT_TIME_STAMP CreationTime = {{0}}; -#endif UCHAR CreationMSec = 0; -#ifndef __REACTOS__ FAT_TIME_STAMP LastWriteTime = {0}; FAT_TIME_STAMP LastAccessTime = {0}; FAT_DATE LastAccessDate = {0}; -#else - FAT_TIME_STAMP LastWriteTime = {{0}}; - FAT_TIME_STAMP LastAccessTime = {{0}}; - FAT_DATE LastAccessDate = {0, 0, 0}; -#endif UCHAR Attributes; BOOLEAN ModifyCreation = FALSE; @@ -1974,15 +1964,9 @@ Return Value: BOOLEAN ModifiedAttributes = FALSE; #endif -#ifndef __REACTOS__ LARGE_INTEGER LargeCreationTime = {0}; LARGE_INTEGER LargeLastWriteTime = {0}; LARGE_INTEGER LargeLastAccessTime = {0}; -#else - LARGE_INTEGER LargeCreationTime = {{0}}; - LARGE_INTEGER LargeLastWriteTime = {{0}}; - LARGE_INTEGER LargeLastAccessTime = {{0}}; -#endif ULONG NotifyFilter = 0; diff --git a/drivers/filesystems/fastfat_new/fsctrl.c b/drivers/filesystems/fastfat_new/fsctrl.c index c3559cf8e35..ef78449b5d5 100644 --- a/drivers/filesystems/fastfat_new/fsctrl.c +++ b/drivers/filesystems/fastfat_new/fsctrl.c @@ -916,11 +916,7 @@ Return Value: PLIST_ENTRY Links; -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif ULONG ChangeCount = 0; DISK_GEOMETRY Geometry; @@ -1907,11 +1903,7 @@ Return Value: BOOLEAN LabelFound; ULONG ChangeCount = 0; -#ifndef __REACTOS__ IO_STATUS_BLOCK Iosb = {0}; -#else - IO_STATUS_BLOCK Iosb = {{0}}; -#endif PAGED_CODE(); diff --git a/drivers/filesystems/fastfat_new/read.c b/drivers/filesystems/fastfat_new/read.c index f9d6e761f1d..95770aac934 100644 --- a/drivers/filesystems/fastfat_new/read.c +++ b/drivers/filesystems/fastfat_new/read.c @@ -972,11 +972,7 @@ Return Value: (FileObject->SectionObjectPointer->DataSectionObject != NULL)) { -#ifndef __REACTOS__ IO_STATUS_BLOCK IoStatus = {0}; -#else - IO_STATUS_BLOCK IoStatus = {{0}}; -#endif #ifndef REDUCE_SYNCHRONIZATION if (!FatAcquireExclusiveFcb( IrpContext, FcbOrDcb )) { diff --git a/drivers/filesystems/fastfat_new/strucsup.c b/drivers/filesystems/fastfat_new/strucsup.c index 38cad350c05..5cd50fe3348 100644 --- a/drivers/filesystems/fastfat_new/strucsup.c +++ b/drivers/filesystems/fastfat_new/strucsup.c @@ -1458,11 +1458,7 @@ Return Value: if (FatData.ChicagoMode) { -#ifndef __REACTOS__ LARGE_INTEGER FatSystemJanOne1980 = {0}; -#else - LARGE_INTEGER FatSystemJanOne1980 = {{0}}; -#endif // // If either date is possibly zero, get the system @@ -1796,11 +1792,7 @@ Return Value: if (FatData.ChicagoMode) { -#ifndef __REACTOS__ LARGE_INTEGER FatSystemJanOne1980 = {0}; -#else - LARGE_INTEGER FatSystemJanOne1980 = {{0}}; -#endif // // If either date is possibly zero, get the system diff --git a/drivers/filesystems/fastfat_new/write.c b/drivers/filesystems/fastfat_new/write.c index 937568535d3..cf75c213958 100644 --- a/drivers/filesystems/fastfat_new/write.c +++ b/drivers/filesystems/fastfat_new/write.c @@ -1175,11 +1175,7 @@ Return Value: if (NonCachedIo && !PagingIo && (FileObject->SectionObjectPointer->DataSectionObject != NULL)) { -#ifndef __REACTOS__ IO_STATUS_BLOCK IoStatus = {0}; -#else - IO_STATUS_BLOCK IoStatus = {{0}}; -#endif // // We need the Fcb exclsuive to do the CcPurgeCache
4 years, 6 months
1
0
0
0
[reactos] 02/04: [FASTFAT_NEW] Fix GCC 8.4 build
by Serge Gautherie
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9611e88624ccfda1f34b8…
commit 9611e88624ccfda1f34b82893b61144bb0373600 Author: Serge Gautherie <reactos-git_serge_171003(a)gautherie.fr> AuthorDate: Tue Jun 9 02:52:17 2020 +0200 Commit: Victor Perevertkin <victor(a)perevertkin.ru> CommitDate: Sun Jun 21 09:27:44 2020 +0300 [FASTFAT_NEW] Fix GCC 8.4 build '.../strucsup.c:...:...: error: 'Ex*NPagedLookasideList' is static but used in inline function 'Fat*' which is not static [-Werror]' --- drivers/filesystems/fastfat_new/strucsup.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/filesystems/fastfat_new/strucsup.c b/drivers/filesystems/fastfat_new/strucsup.c index c540f37d0f2..38cad350c05 100644 --- a/drivers/filesystems/fastfat_new/strucsup.c +++ b/drivers/filesystems/fastfat_new/strucsup.c @@ -93,6 +93,9 @@ FatFreeFcb ( ExFreePool( Fcb ); } +#ifdef __REACTOS__ +static +#endif INLINE PNON_PAGED_FCB FatAllocateNonPagedFcb ( @@ -101,6 +104,9 @@ FatAllocateNonPagedFcb ( return (PNON_PAGED_FCB) ExAllocateFromNPagedLookasideList( &FatNonPagedFcbLookasideList ); } +#ifdef __REACTOS__ +static +#endif INLINE VOID FatFreeNonPagedFcb ( @@ -114,6 +120,9 @@ FatFreeNonPagedFcb ( ExFreeToNPagedLookasideList( &FatNonPagedFcbLookasideList, (PVOID) NonPagedFcb ); } +#ifdef __REACTOS__ +static +#endif INLINE PERESOURCE FatAllocateResource ( @@ -128,6 +137,9 @@ FatAllocateResource ( return Resource; } +#ifdef __REACTOS__ +static +#endif INLINE VOID FatFreeResource ( @@ -143,6 +155,9 @@ FatFreeResource ( ExFreeToNPagedLookasideList( &FatEResourceLookasideList, (PVOID) Resource ); } +#ifdef __REACTOS__ +static +#endif INLINE PIRP_CONTEXT FatAllocateIrpContext ( @@ -151,6 +166,9 @@ FatAllocateIrpContext ( return (PIRP_CONTEXT) ExAllocateFromNPagedLookasideList( &FatIrpContextLookasideList ); } +#ifdef __REACTOS__ +static +#endif INLINE VOID FatFreeIrpContext (
4 years, 6 months
1
0
0
0
[reactos] 01/04: [FASTFAT_NEW] fatdata.h: Properly mark ReactOS own code
by Serge Gautherie
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f26fa55891fbb0dae1ce7…
commit f26fa55891fbb0dae1ce7aa4461796f85f709163 Author: Serge Gautherie <reactos-git_serge_171003(a)gautherie.fr> AuthorDate: Tue Jun 9 02:52:17 2020 +0200 Commit: Victor Perevertkin <victor(a)perevertkin.ru> CommitDate: Sun Jun 21 09:27:44 2020 +0300 [FASTFAT_NEW] fatdata.h: Properly mark ReactOS own code Addendum to 3013e15. --- drivers/filesystems/fastfat_new/fatdata.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/filesystems/fastfat_new/fatdata.h b/drivers/filesystems/fastfat_new/fatdata.h index ad4d1fb8128..ff20bba081c 100644 --- a/drivers/filesystems/fastfat_new/fatdata.h +++ b/drivers/filesystems/fastfat_new/fatdata.h @@ -234,7 +234,7 @@ extern LONG FatDebugTraceIndent; } \ } -#ifdef _MSC_VER +#if !defined(__REACTOS__) || defined(_MSC_VER) #define DebugDump(STR,LEVEL,PTR) { \ __pragma(warning(push)) \ __pragma(warning(disable:4210)) \
4 years, 6 months
1
0
0
0
[reactos] 07/07: [CMAKE] Remove work-arounds for old CMake versions. CORE-17109
by Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=dd6eb40381be1a090e413…
commit dd6eb40381be1a090e4130e6d5cdd9fea141aac9 Author: Thomas Faber <thomas.faber(a)reactos.org> AuthorDate: Sun Jun 7 09:26:23 2020 +0200 Commit: Thomas Faber <thomas.faber(a)reactos.org> CommitDate: Sat Jun 20 15:25:29 2020 +0200 [CMAKE] Remove work-arounds for old CMake versions. CORE-17109 --- CMakeLists.txt | 3 -- modules/rostests/winetests/msi/CMakeLists.txt | 8 ++-- sdk/cmake/gcc.cmake | 19 +++------ sdk/cmake/msvc.cmake | 56 ++++++++------------------- 4 files changed, 24 insertions(+), 62 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c7f842d5ae4..4cbb6b3f190 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,9 +131,6 @@ else() if(ENABLE_CCACHE) message(WARNING "-- Disabling precompiled headers support (ccache).") option(PCH "Whether to use precompiled headers" OFF) - elseif(CMAKE_VERSION VERSION_LESS 3.16.0) - message(WARNING "-- Disabling precompiled headers support due to this unsupported CMake version: ${CMAKE_VERSION}.") - option(PCH "Whether to use precompiled headers" OFF) elseif(GCC) message(WARNING "-- Disabling precompiled headers on GCC by default CORE-17108.") option(PCH "Whether to use precompiled headers" OFF) diff --git a/modules/rostests/winetests/msi/CMakeLists.txt b/modules/rostests/winetests/msi/CMakeLists.txt index 279ed0b5e08..51bf9791558 100644 --- a/modules/rostests/winetests/msi/CMakeLists.txt +++ b/modules/rostests/winetests/msi/CMakeLists.txt @@ -34,11 +34,9 @@ list(APPEND SOURCE list(APPEND PCH_SKIP_SOURCE testlist.c) -if(NOT ${CMAKE_VERSION} VERSION_LESS "3.9.0") - # CMake 3.9 and higher requires to specify this dependency manually - # see
https://gitlab.kitware.com/cmake/cmake/issues/19933
- set_property(SOURCE msi_winetest.rc PROPERTY OBJECT_DEPENDS custom.dll) -endif() +# CMake 3.9 and higher requires to specify this dependency manually +# see
https://gitlab.kitware.com/cmake/cmake/issues/19933
+set_property(SOURCE msi_winetest.rc PROPERTY OBJECT_DEPENDS custom.dll) add_executable(msi_winetest ${SOURCE} diff --git a/sdk/cmake/gcc.cmake b/sdk/cmake/gcc.cmake index b48803c7529..92d648321d4 100644 --- a/sdk/cmake/gcc.cmake +++ b/sdk/cmake/gcc.cmake @@ -266,21 +266,12 @@ if((CMAKE_C_COMPILER_ID STREQUAL "GNU") AND set(_compress_debug_sections_flag "-Wa,--compress-debug-sections") endif() -if(CMAKE_VERSION VERSION_LESS 3.4.0) - set(CMAKE_C_COMPILE_OBJECT "${CCACHE} <CMAKE_C_COMPILER> <DEFINES> ${_compress_debug_sections_flag} <FLAGS> -o <OBJECT> -c <SOURCE>") - # FIXME: Once the GCC toolchain bugs are fixed, add _compress_debug_sections_flag to CXX too - set(CMAKE_CXX_COMPILE_OBJECT "${CCACHE} <CMAKE_CXX_COMPILER> <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>") - set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> ${_compress_debug_sections_flag} -x assembler-with-cpp -o <OBJECT> -I${REACTOS_SOURCE_DIR}/sdk/include/asm -I${REACTOS_BINARY_DIR}/sdk/include/asm <FLAGS> <DEFINES> -D__ASM__ -c <SOURCE>") +set(CMAKE_C_COMPILE_OBJECT "${CCACHE} <CMAKE_C_COMPILER> <DEFINES> ${_compress_debug_sections_flag} <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") +# FIXME: Once the GCC toolchain bugs are fixed, add _compress_debug_sections_flag to CXX too +set(CMAKE_CXX_COMPILE_OBJECT "${CCACHE} <CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") +set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> ${_compress_debug_sections_flag} -x assembler-with-cpp -o <OBJECT> -I${REACTOS_SOURCE_DIR}/sdk/include/asm -I${REACTOS_BINARY_DIR}/sdk/include/asm <INCLUDES> <FLAGS> <DEFINES> -D__ASM__ -c <SOURCE>") - set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <FLAGS> -DRC_INVOKED -D__WIN32__=1 -D__FLAT__=1 ${I18N_DEFS} <DEFINES> <SOURCE> <OBJECT>") -else() - set(CMAKE_C_COMPILE_OBJECT "${CCACHE} <CMAKE_C_COMPILER> <DEFINES> ${_compress_debug_sections_flag} <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") - # FIXME: Once the GCC toolchain bugs are fixed, add _compress_debug_sections_flag to CXX too - set(CMAKE_CXX_COMPILE_OBJECT "${CCACHE} <CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") - set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> ${_compress_debug_sections_flag} -x assembler-with-cpp -o <OBJECT> -I${REACTOS_SOURCE_DIR}/sdk/include/asm -I${REACTOS_BINARY_DIR}/sdk/include/asm <INCLUDES> <FLAGS> <DEFINES> -D__ASM__ -c <SOURCE>") - - set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <INCLUDES> <FLAGS> -DRC_INVOKED -D__WIN32__=1 -D__FLAT__=1 ${I18N_DEFS} <DEFINES> <SOURCE> <OBJECT>") -endif() +set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff <INCLUDES> <FLAGS> -DRC_INVOKED -D__WIN32__=1 -D__FLAT__=1 ${I18N_DEFS} <DEFINES> <SOURCE> <OBJECT>") set(CMAKE_DEPFILE_FLAGS_RC "--preprocessor \"${MINGW_TOOLCHAIN_PREFIX}gcc${MINGW_TOOLCHAIN_SUFFIX} -E -xc-header -MMD -MF <DEPFILE> -MT <OBJECT>\" ") # Optional 3rd parameter: stdcall stack bytes diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index cbac0fc084c..5a5a8802443 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -177,28 +177,15 @@ if(MSVC_IDE) # For VS builds we'll only have en-US in resource files add_definitions(/DLANGUAGE_EN_US) else() - if(CMAKE_VERSION VERSION_LESS 3.4.0) - set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> /nologo <FLAGS> <DEFINES> ${I18N_DEFS} /fo<OBJECT> <SOURCE>") - if(ARCH STREQUAL "arm") - set(CMAKE_ASM_COMPILE_OBJECT - "cl ${cl_includes_flag} /nologo /X /I${REACTOS_SOURCE_DIR}/sdk/include/asm /I${REACTOS_BINARY_DIR}/sdk/include/asm <FLAGS> <DEFINES> /D__ASM__ /D_USE_ML /EP /c <SOURCE> > <OBJECT>.tmp" - "<CMAKE_ASM_COMPILER> -nologo -o <OBJECT> <OBJECT>.tmp") - else() - set(CMAKE_ASM_COMPILE_OBJECT - "cl ${cl_includes_flag} /nologo /X /I${REACTOS_SOURCE_DIR}/sdk/include/asm /I${REACTOS_BINARY_DIR}/sdk/include/asm <FLAGS> <DEFINES> /D__ASM__ /D_USE_ML /EP /c <SOURCE> > <OBJECT>.tmp" - "<CMAKE_ASM_COMPILER> /nologo /Cp /Fo<OBJECT> /c /Ta <OBJECT>.tmp") - endif() + set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> /nologo <INCLUDES> <FLAGS> <DEFINES> ${I18N_DEFS} /fo<OBJECT> <SOURCE>") + if(ARCH STREQUAL "arm") + set(CMAKE_ASM_COMPILE_OBJECT + "cl ${cl_includes_flag} /nologo /X /I${REACTOS_SOURCE_DIR}/sdk/include/asm /I${REACTOS_BINARY_DIR}/sdk/include/asm <INCLUDES> <FLAGS> <DEFINES> /D__ASM__ /D_USE_ML /EP /c <SOURCE> > <OBJECT>.tmp" + "<CMAKE_ASM_COMPILER> -nologo -o <OBJECT> <OBJECT>.tmp") else() - set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> /nologo <INCLUDES> <FLAGS> <DEFINES> ${I18N_DEFS} /fo<OBJECT> <SOURCE>") - if(ARCH STREQUAL "arm") - set(CMAKE_ASM_COMPILE_OBJECT - "cl ${cl_includes_flag} /nologo /X /I${REACTOS_SOURCE_DIR}/sdk/include/asm /I${REACTOS_BINARY_DIR}/sdk/include/asm <INCLUDES> <FLAGS> <DEFINES> /D__ASM__ /D_USE_ML /EP /c <SOURCE> > <OBJECT>.tmp" - "<CMAKE_ASM_COMPILER> -nologo -o <OBJECT> <OBJECT>.tmp") - else() - set(CMAKE_ASM_COMPILE_OBJECT - "cl ${cl_includes_flag} /nologo /X /I${REACTOS_SOURCE_DIR}/sdk/include/asm /I${REACTOS_BINARY_DIR}/sdk/include/asm <INCLUDES> <FLAGS> <DEFINES> /D__ASM__ /D_USE_ML /EP /c <SOURCE> > <OBJECT>.tmp" - "<CMAKE_ASM_COMPILER> /nologo /Cp /Fo<OBJECT> /c /Ta <OBJECT>.tmp") - endif() + set(CMAKE_ASM_COMPILE_OBJECT + "cl ${cl_includes_flag} /nologo /X /I${REACTOS_SOURCE_DIR}/sdk/include/asm /I${REACTOS_BINARY_DIR}/sdk/include/asm <INCLUDES> <FLAGS> <DEFINES> /D__ASM__ /D_USE_ML /EP /c <SOURCE> > <OBJECT>.tmp" + "<CMAKE_ASM_COMPILER> /nologo /Cp /Fo<OBJECT> /c /Ta <OBJECT>.tmp") endif() endif() @@ -207,25 +194,14 @@ if(_VS_ANALYZE_) add_compile_flags("/analyze") elseif(_PREFAST_) message("PREFAST enabled!") - if(CMAKE_VERSION VERSION_LESS 3.4.0) - set(CMAKE_C_COMPILE_OBJECT "prefast <CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> <DEFINES> /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}" - "prefast LIST") - set(CMAKE_CXX_COMPILE_OBJECT "prefast <CMAKE_CXX_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <FLAGS> <DEFINES> /TP /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}" - "prefast LIST") - set(CMAKE_C_LINK_EXECUTABLE - "<CMAKE_C_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}") - set(CMAKE_CXX_LINK_EXECUTABLE - "<CMAKE_CXX_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}") - else() - set(CMAKE_C_COMPILE_OBJECT "prefast <CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <INCLUDES> <FLAGS> <DEFINES> /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}" - "prefast LIST") - set(CMAKE_CXX_COMPILE_OBJECT "prefast <CMAKE_CXX_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <INCLUDES> <FLAGS> <DEFINES> /TP /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}" - "prefast LIST") - set(CMAKE_C_LINK_EXECUTABLE - "<CMAKE_C_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <INCLUDES> <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}") - set(CMAKE_CXX_LINK_EXECUTABLE - "<CMAKE_CXX_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <INCLUDES> <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}") - endif() + set(CMAKE_C_COMPILE_OBJECT "prefast <CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <INCLUDES> <FLAGS> <DEFINES> /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}" + "prefast LIST") + set(CMAKE_CXX_COMPILE_OBJECT "prefast <CMAKE_CXX_COMPILER> ${CMAKE_START_TEMP_FILE} ${CMAKE_CL_NOLOGO} <INCLUDES> <FLAGS> <DEFINES> /TP /Fo<OBJECT> -c <SOURCE>${CMAKE_END_TEMP_FILE}" + "prefast LIST") + set(CMAKE_C_LINK_EXECUTABLE + "<CMAKE_C_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <INCLUDES> <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}") + set(CMAKE_CXX_LINK_EXECUTABLE + "<CMAKE_CXX_COMPILER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} <INCLUDES> <FLAGS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}") endif() set(CMAKE_RC_CREATE_SHARED_LIBRARY ${CMAKE_C_CREATE_SHARED_LIBRARY})
4 years, 6 months
1
0
0
0
[reactos] 06/07: [CMAKE] Use CMake 3.17 default policies. CORE-17109
by Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a3a1d8f421cc37c1d637e…
commit a3a1d8f421cc37c1d637eb65ba4c5922b2cf7945 Author: Thomas Faber <thomas.faber(a)reactos.org> AuthorDate: Sat Jun 6 23:00:02 2020 +0200 Commit: Thomas Faber <thomas.faber(a)reactos.org> CommitDate: Sat Jun 20 15:25:28 2020 +0200 [CMAKE] Use CMake 3.17 default policies. CORE-17109 --- CMakeLists.txt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25ddb7f672a..c7f842d5ae4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,21 +1,10 @@ cmake_minimum_required(VERSION 3.17.0) -cmake_policy(VERSION 3.2.1) if(NOT CMAKE_VERSION MATCHES "ReactOS") message(WARNING "Building with \"${CMAKE_COMMAND}\", which is not the custom CMake included in RosBE, might cause build issues...") endif() -if(POLICY CMP0058) - # Ninja requires custom command byproducts to be explicit - cmake_policy(SET CMP0058 NEW) -endif() - -if(POLICY CMP0065) - # Do not add flags to export symbols from executables without the ENABLE_EXPORTS target property - cmake_policy(SET CMP0065 NEW) -endif() - project(REACTOS) # Versioning
4 years, 6 months
1
0
0
0
[reactos] 05/07: [CMAKE] Bump minimum to 3.17, no longer require -ReactOS build. CORE-17109
by Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=add677e45b87aff1fbcf3…
commit add677e45b87aff1fbcf30ec4e31ee07c6921c53 Author: Thomas Faber <thomas.faber(a)reactos.org> AuthorDate: Sat Jun 6 22:59:26 2020 +0200 Commit: Thomas Faber <thomas.faber(a)reactos.org> CommitDate: Sat Jun 20 15:25:28 2020 +0200 [CMAKE] Bump minimum to 3.17, no longer require -ReactOS build. CORE-17109 --- CMakeLists.txt | 2 +- ntoskrnl/ntkrnlmp/CMakeLists.txt | 2 +- sdk/cmake/msvc.cmake | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 826eeb983a5..25ddb7f672a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 3.2.1) +cmake_minimum_required(VERSION 3.17.0) cmake_policy(VERSION 3.2.1) if(NOT CMAKE_VERSION MATCHES "ReactOS") diff --git a/ntoskrnl/ntkrnlmp/CMakeLists.txt b/ntoskrnl/ntkrnlmp/CMakeLists.txt index 7f8ff100556..eb9610e1719 100644 --- a/ntoskrnl/ntkrnlmp/CMakeLists.txt +++ b/ntoskrnl/ntkrnlmp/CMakeLists.txt @@ -4,7 +4,7 @@ include(../ntos.cmake) include_directories(${REACTOS_SOURCE_DIR}/ntoskrnl) spec2def(ntkrnlmp.exe ../ntoskrnl.spec) -if(MSVC_IDE AND (CMAKE_VERSION MATCHES "ReactOS")) +if(MSVC_IDE) set_source_files_properties(${NTKRNLMP_ASM_SOURCE} PROPERTIES COMPILE_DEFINITIONS "CONFIG_SMP") endif() diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index 7ed9c0c7da7..cbac0fc084c 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -173,7 +173,7 @@ else() set(cl_includes_flag "/showIncludes") endif() -if(MSVC_IDE AND (CMAKE_VERSION MATCHES "ReactOS")) +if(MSVC_IDE) # For VS builds we'll only have en-US in resource files add_definitions(/DLANGUAGE_EN_US) else() @@ -467,7 +467,7 @@ function(allow_warnings __module) endfunction() macro(add_asm_files _target) - if(MSVC_IDE AND (CMAKE_VERSION MATCHES "ReactOS")) + if(MSVC_IDE) get_defines(_directory_defines) get_includes(_directory_includes) get_directory_property(_defines COMPILE_DEFINITIONS) @@ -534,7 +534,7 @@ function(add_linker_script _target _linker_script_file) else() set(_no_std_includes_flag "/X") endif() - if(MSVC_IDE AND (CMAKE_VERSION MATCHES "ReactOS")) + if(MSVC_IDE) # MSBuild, via the VS IDE, uses response files when calling CL or LINK. # We cannot specify a custom response file on the linker command-line, # since specifying response files from within response files is forbidden.
4 years, 6 months
1
0
0
0
[reactos] 04/07: [CMAKE] Set CMAKE_MSVC_RUNTIME_LIBRARY to satisfy CMP0091. CORE-17109
by Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3169c94e06b4762a48304…
commit 3169c94e06b4762a48304ef688b21aa4cacc84ab Author: Thomas Faber <thomas.faber(a)reactos.org> AuthorDate: Sun Jun 7 00:20:09 2020 +0200 Commit: Thomas Faber <thomas.faber(a)reactos.org> CommitDate: Sat Jun 20 15:25:27 2020 +0200 [CMAKE] Set CMAKE_MSVC_RUNTIME_LIBRARY to satisfy CMP0091. CORE-17109 We use /NODEFAULTLIB, and consequently also don't want CMake to add a default library for us. --- sdk/cmake/msvc.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index 4bfa2f81952..7ed9c0c7da7 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -157,6 +157,7 @@ endif() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO /INCREMENTAL:NO /SAFESEH:NO /NODEFAULTLIB /RELEASE ${_hotpatch_link_flag} /IGNORE:4039") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO /INCREMENTAL:NO /SAFESEH:NO /NODEFAULTLIB /RELEASE ${_hotpatch_link_flag} /IGNORE:4104 /IGNORE:4039") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /MANIFEST:NO /INCREMENTAL:NO /SAFESEH:NO /NODEFAULTLIB /RELEASE ${_hotpatch_link_flag} /IGNORE:4039") +set(CMAKE_MSVC_RUNTIME_LIBRARY "") # HACK: Remove the /implib argument, implibs are generated separately string(REPLACE "/implib:<TARGET_IMPLIB>" "" CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE}")
4 years, 6 months
1
0
0
0
[reactos] 03/07: [CMAKE] Use NEW policy for CMP0058. CORE-17109
by Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=94073cc1d963f729578e0…
commit 94073cc1d963f729578e02f6895f156bc7398019 Author: Thomas Faber <thomas.faber(a)reactos.org> AuthorDate: Sat Jun 6 22:57:30 2020 +0200 Commit: Thomas Faber <thomas.faber(a)reactos.org> CommitDate: Sat Jun 20 15:25:27 2020 +0200 [CMAKE] Use NEW policy for CMP0058. CORE-17109 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2c5fcf639b..826eeb983a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ endif() if(POLICY CMP0058) # Ninja requires custom command byproducts to be explicit - cmake_policy(SET CMP0058 OLD) + cmake_policy(SET CMP0058 NEW) endif() if(POLICY CMP0065)
4 years, 6 months
1
0
0
0
← Newer
1
2
3
4
5
6
7
8
9
10
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
Results per page:
10
25
50
100
200