[ros-diffs] [reactos] 01/06: [KMTESTS:SE] Avoid use of uninitialized pool and hardcoded offsets.

2024-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=64a6bd4c3e88780a6e4082f004ad7d2c552bc49e

commit 64a6bd4c3e88780a6e4082f004ad7d2c552bc49e
Author: Thomas Faber 
AuthorDate: Sat May 27 11:19:17 2023 -0400
Commit: Timo Kreuzer 
CommitDate: Thu Sep 12 17:44:13 2024 +0300

[KMTESTS:SE] Avoid use of uninitialized pool and hardcoded offsets.
---
 .../rostests/kmtests/ntos_se/SeQueryInfoToken.c| 33 ++
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c 
b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
index a506ceb78ca..f5f2b0213aa 100644
--- a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
+++ b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
@@ -13,6 +13,19 @@
 #define NDEBUG
 #include 
 
+// Copied from PspProcessMapping -- although the values don't matter much for
+// the most part.
+static GENERIC_MAPPING ProcessGenericMapping =
+{
+STANDARD_RIGHTS_READ| PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
+STANDARD_RIGHTS_WRITE   | PROCESS_CREATE_PROCESS| 
PROCESS_CREATE_THREAD   |
+PROCESS_VM_OPERATION| PROCESS_VM_WRITE  | PROCESS_DUP_HANDLE   
   |
+PROCESS_TERMINATE   | PROCESS_SET_QUOTA | 
PROCESS_SET_INFORMATION |
+PROCESS_SUSPEND_RESUME,
+STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE,
+PROCESS_ALL_ACCESS
+};
+
 
//--//
 //  Testing Functions  
 //
 
//--//
@@ -222,8 +235,6 @@ START_TEST(SeQueryInfoToken)
 PACCESS_TOKEN Token = NULL;
 PTOKEN_PRIVILEGES TPrivileges;
 PVOID Buffer;
-POBJECT_TYPE PsProcessType = NULL;
-PGENERIC_MAPPING GenericMapping;
 ULONG i;
 
 SubjectContext = ExAllocatePool(PagedPool, 
sizeof(SECURITY_SUBJECT_CONTEXT));
@@ -240,14 +251,14 @@ START_TEST(SeQueryInfoToken)
 ////
 
 AccessState = ExAllocatePool(PagedPool, sizeof(ACCESS_STATE));
-PsProcessType = ExAllocatePool(PagedPool, sizeof(OBJECT_TYPE));
-AuxData = ExAllocatePool(PagedPool, 0xC8);
-GenericMapping = ExAllocatePool(PagedPool, sizeof(GENERIC_MAPPING));
+// AUX_ACCESS_DATA gets larger in newer Windows version.
+// This is the largest known size, found in Windows 10/11.
+AuxData = ExAllocatePoolZero(PagedPool, 0xE0, 'QSmK');
 
 Status = SeCreateAccessState(AccessState,
- (PVOID)AuxData,
+ AuxData,
  DesiredAccess,
- GenericMapping
+ &ProcessGenericMapping
 );
 
 ok((Status == STATUS_SUCCESS), "SeCreateAccessState failed with Status 
0x%08X\n", Status);
@@ -319,7 +330,7 @@ START_TEST(SeQueryInfoToken)
 AccessState->OriginalDesiredAccess,
 AccessState->PreviouslyGrantedAccess,
 &Privileges,
-(PGENERIC_MAPPING)((PCHAR*)PsProcessType + 52),
+&ProcessGenericMapping,
 KernelMode,
 &AccessMask,
 &Status
@@ -379,7 +390,7 @@ START_TEST(SeQueryInfoToken)
 AccessState->OriginalDesiredAccess,
 AccessState->PreviouslyGrantedAccess,
 &Privileges,
-(PGENERIC_MAPPING)((PCHAR*)PsProcessType + 52),
+&ProcessGenericMapping,
 KernelMode,
 &AccessMask,
 &Status
@@ -402,9 +413,7 @@ START_TEST(SeQueryInfoToken)
 
 SeDeleteAccessState(AccessState);
 
-if (GenericMapping) ExFreePool(GenericMapping);
-if (PsProcessType) ExFreePool(PsProcessType);
 if (SubjectContext) ExFreePool(SubjectContext);
-if (AuxData) ExFreePool(AuxData);
+if (AuxData) ExFreePoolWithTag(AuxData, 'QSmK');
 if (AccessState) ExFreePool(AccessState);
 }


[ros-diffs] [reactos] 04/06: [NDK] Match AUX_ACCESS_DATA definition with publicly available version.

2024-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=156053cafd3d325ac5d6e6c341dae55bbb99b88c

commit 156053cafd3d325ac5d6e6c341dae55bbb99b88c
Author: Thomas Faber 
AuthorDate: Sat May 27 18:24:29 2023 -0400
Commit: Timo Kreuzer 
CommitDate: Thu Sep 12 17:44:13 2024 +0300

[NDK] Match AUX_ACCESS_DATA definition with publicly available version.

Looks like public symbols contain this structure starting with Win7,
so we can deduce what it looked like in Win2003.
Note that our previous definition was missing a second ULONG at the
end, which can be seen in the SeQueryInfoToken kmtest -- if you
allocated only sizeof(AUX_ACCESS_DATA), the test would crash with
a 4 byte buffer overflow.
---
 .../rostests/kmtests/ntos_se/SeQueryInfoToken.c| 32 +++---
 ntoskrnl/ob/obhandle.c |  6 ++--
 ntoskrnl/se/access.c   |  4 +--
 ntoskrnl/se/priv.c | 14 +-
 sdk/include/ndk/setypes.h  | 19 +++--
 5 files changed, 45 insertions(+), 30 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c 
b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
index 2ddf864d086..f58bbc3b17e 100644
--- a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
+++ b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
@@ -279,7 +279,7 @@ START_TEST(SeQueryInfoToken)
 //  Testing SeAppendPrivileges//
 ////
 
-InitialPrivilegeCount = AuxData->PrivilegeSet->PrivilegeCount;
+InitialPrivilegeCount = AuxData->PrivilegesUsed->PrivilegeCount;
 trace("Initial privilege count = %lu\n", InitialPrivilegeCount);
 
 //  Testing SeAppendPrivileges. Must change PrivilegeCount to 2 (1 + 1)
@@ -291,7 +291,7 @@ START_TEST(SeQueryInfoToken)
 
 Status = SeAppendPrivileges(AccessState, NewPrivilegeSet);
 ok(Status == STATUS_SUCCESS, "SeAppendPrivileges failed\n");
-ok_eq_ulong(AuxData->PrivilegeSet->PrivilegeCount, InitialPrivilegeCount + 
1);
+ok_eq_ulong(AuxData->PrivilegesUsed->PrivilegeCount, InitialPrivilegeCount 
+ 1);
 ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 
 ////
@@ -305,7 +305,7 @@ START_TEST(SeQueryInfoToken)
 
 Status = SeAppendPrivileges(AccessState, NewPrivilegeSet);
 ok(Status == STATUS_SUCCESS, "SeAppendPrivileges failed\n");
-ok_eq_ulong(AuxData->PrivilegeSet->PrivilegeCount, InitialPrivilegeCount + 
5);
+ok_eq_ulong(AuxData->PrivilegesUsed->PrivilegeCount, InitialPrivilegeCount 
+ 5);
 ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 
 ////
@@ -313,14 +313,14 @@ START_TEST(SeQueryInfoToken)
 ////
 
 // KPROCESSOR_MODE is set to KernelMode ===> Always return TRUE
-ok(SePrivilegeCheck(AuxData->PrivilegeSet, 
&(AccessState->SubjectSecurityContext), KernelMode), "SePrivilegeCheck failed 
with KernelMode mode arg\n");
+ok(SePrivilegeCheck(AuxData->PrivilegesUsed, 
&(AccessState->SubjectSecurityContext), KernelMode), "SePrivilegeCheck failed 
with KernelMode mode arg\n");
 // and call it again
-ok(SePrivilegeCheck(AuxData->PrivilegeSet, 
&(AccessState->SubjectSecurityContext), KernelMode), "SePrivilegeCheck failed 
with KernelMode mode arg\n");
+ok(SePrivilegeCheck(AuxData->PrivilegesUsed, 
&(AccessState->SubjectSecurityContext), KernelMode), "SePrivilegeCheck failed 
with KernelMode mode arg\n");
 
 ////
 
 // KPROCESSOR_MODE is set to UserMode. Expect false
-ok(!SePrivilegeCheck(AuxData->PrivilegeSet, 
&(AccessState->SubjectSecurityContext), UserMode), "SePrivilegeCheck unexpected 
success with UserMode arg\n");
+ok(!SePrivilegeCheck(AuxData->PrivilegesUsed, 
&(AccessState->SubjectSecurityContext), UserMode), "SePrivilegeCheck unexpected 
success with UserMode arg\n");
 
 ////
 
@@ -345,8 +345,8 @@ START_TEST(SeQueryInfoToken)
 ok((Privileges != NULL), "Privileges is NULL\n");
 if (Privileges)
 {
-trace("AuxData->PrivilegeSet->PrivilegeCount = %d ; 
Privileges->PrivilegeCount = %d\n",
-  AuxData->PrivilegeSet->PrivilegeCount, 
Privileges->PrivilegeCount);
+trace("AuxData->PrivilegesUsed->PrivilegeCount = %d ; 
Privileges->PrivilegeCount = %d\n",
+  AuxData->PrivilegesUsed->PrivilegeCount, 
Privil

[ros-diffs] [reactos] 06/06: [KMTESTS:SE] Fix failing tests.

2024-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=44bdafa17e2b870c570ea15f3bdb56decfd7aaa5

commit 44bdafa17e2b870c570ea15f3bdb56decfd7aaa5
Author: Thomas Faber 
AuthorDate: Sat May 27 22:37:47 2023 -0400
Commit: Timo Kreuzer 
CommitDate: Thu Sep 12 17:44:13 2024 +0300

[KMTESTS:SE] Fix failing tests.
---
 modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c | 10 --
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c 
b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
index f58bbc3b17e..950cb78e35c 100644
--- a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
+++ b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
@@ -328,6 +328,10 @@ START_TEST(SeQueryInfoToken)
 //  Testing SeFreePrivileges  //
 ////
 
+// FIXME: KernelMode will automatically get all access granted without
+// getting Privileges filled in. For UserMode, Privileges will only get
+// filled if either WRITE_OWNER or ACCESS_SYSTEM_SECURITY is requested
+// and granted. So this doesn't really test SeFreePrivileges.
 Privileges = NULL;
 Checker = SeAccessCheck(
 AccessState->SecurityDescriptor,
@@ -342,7 +346,7 @@ START_TEST(SeQueryInfoToken)
 &Status
 );
 ok(Checker, "Checker is NULL\n");
-ok((Privileges != NULL), "Privileges is NULL\n");
+ok(Privileges == NULL, "Privileges is not NULL\n");
 if (Privileges)
 {
 trace("AuxData->PrivilegesUsed->PrivilegeCount = %d ; 
Privileges->PrivilegeCount = %d\n",
@@ -390,6 +394,8 @@ START_TEST(SeQueryInfoToken)
 
 // Call SeFreePrivileges again
 
+// FIXME: See other SeAccessCheck call above, we're not really testing
+// SeFreePrivileges here.
 Privileges = NULL;
 Checker = SeAccessCheck(
 AccessState->SecurityDescriptor,
@@ -404,7 +410,7 @@ START_TEST(SeQueryInfoToken)
 &Status
 );
 ok(Checker, "Checker is NULL\n");
-ok((Privileges != NULL), "Privileges is NULL\n");
+ok(Privileges == NULL, "Privileges is not NULL\n");
 if (Privileges)
 {
 trace("AuxData->PrivilegesUsed->PrivilegeCount = %d ; 
Privileges->PrivilegeCount = %d\n",


[ros-diffs] [reactos] 05/06: [NTOS:SE] Mark output parameters as such.

2024-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=bf6af0f52eba23b2ca6677813792baa80c6d1f82

commit bf6af0f52eba23b2ca6677813792baa80c6d1f82
Author: Thomas Faber 
AuthorDate: Sat May 27 22:29:16 2023 -0400
Commit: Timo Kreuzer 
CommitDate: Thu Sep 12 17:44:13 2024 +0300

[NTOS:SE] Mark output parameters as such.
---
 ntoskrnl/se/access.c | 16 
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/ntoskrnl/se/access.c b/ntoskrnl/se/access.c
index d1ecd5bd571..7a9eedeba66 100644
--- a/ntoskrnl/se/access.c
+++ b/ntoskrnl/se/access.c
@@ -23,10 +23,10 @@
  * @param[in] Process
  * Valid process object where subject context is to be captured.
  *
- * @param[in,out] AccessState
+ * @param[out] AccessState
  * An initialized returned parameter to an access state.
  *
- * @param[in] AuxData
+ * @param[out] AuxData
  * Auxiliary security data for access state.
  *
  * @param[in] Access
@@ -43,8 +43,8 @@ NTAPI
 SeCreateAccessStateEx(
 _In_ PETHREAD Thread,
 _In_ PEPROCESS Process,
-_Inout_ PACCESS_STATE AccessState,
-_In_ PAUX_ACCESS_DATA AuxData,
+_Out_ PACCESS_STATE AccessState,
+_Out_ __drv_aliasesMem PAUX_ACCESS_DATA AuxData,
 _In_ ACCESS_MASK Access,
 _In_ PGENERIC_MAPPING GenericMapping)
 {
@@ -101,10 +101,10 @@ SeCreateAccessStateEx(
  * @brief
  * Creates an access state.
  *
- * @param[in,out] AccessState
+ * @param[out] AccessState
  * An initialized returned parameter to an access state.
  *
- * @param[in] AuxData
+ * @param[out] AuxData
  * Auxiliary security data for access state.
  *
  * @param[in] Access
@@ -119,8 +119,8 @@ SeCreateAccessStateEx(
 NTSTATUS
 NTAPI
 SeCreateAccessState(
-_Inout_ PACCESS_STATE AccessState,
-_In_ PAUX_ACCESS_DATA AuxData,
+_Out_ PACCESS_STATE AccessState,
+_Out_ __drv_aliasesMem PAUX_ACCESS_DATA AuxData,
 _In_ ACCESS_MASK Access,
 _In_ PGENERIC_MAPPING GenericMapping)
 {


[ros-diffs] [reactos] 03/06: [KMTESTS:SE] Don't modify internal data structure, this might cause buffer overrun.

2024-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ff410211e960b466c9c5c887878eb70823ad3599

commit ff410211e960b466c9c5c887878eb70823ad3599
Author: Thomas Faber 
AuthorDate: Sat May 27 14:07:49 2023 -0400
Commit: Timo Kreuzer 
CommitDate: Thu Sep 12 17:44:13 2024 +0300

[KMTESTS:SE] Don't modify internal data structure, this might cause buffer 
overrun.
---
 modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c 
b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
index ae4c50f5561..2ddf864d086 100644
--- a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
+++ b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
@@ -229,6 +229,7 @@ START_TEST(SeQueryInfoToken)
 NTSTATUS Status = STATUS_SUCCESS;
 PAUX_ACCESS_DATA AuxData = NULL;
 PPRIVILEGE_SET NewPrivilegeSet;
+ULONG InitialPrivilegeCount;
 BOOLEAN Checker;
 PPRIVILEGE_SET Privileges = NULL;
 PSECURITY_SUBJECT_CONTEXT SubjectContext = NULL;
@@ -278,7 +279,8 @@ START_TEST(SeQueryInfoToken)
 //  Testing SeAppendPrivileges//
 ////
 
-AuxData->PrivilegeSet->PrivilegeCount = 1;
+InitialPrivilegeCount = AuxData->PrivilegeSet->PrivilegeCount;
+trace("Initial privilege count = %lu\n", InitialPrivilegeCount);
 
 //  Testing SeAppendPrivileges. Must change PrivilegeCount to 2 (1 + 1)
 
@@ -289,7 +291,7 @@ START_TEST(SeQueryInfoToken)
 
 Status = SeAppendPrivileges(AccessState, NewPrivilegeSet);
 ok(Status == STATUS_SUCCESS, "SeAppendPrivileges failed\n");
-ok((AuxData->PrivilegeSet->PrivilegeCount == 2),"PrivelegeCount must be 2, 
but it is %d\n", AuxData->PrivilegeSet->PrivilegeCount);
+ok_eq_ulong(AuxData->PrivilegeSet->PrivilegeCount, InitialPrivilegeCount + 
1);
 ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 
 ////
@@ -303,7 +305,7 @@ START_TEST(SeQueryInfoToken)
 
 Status = SeAppendPrivileges(AccessState, NewPrivilegeSet);
 ok(Status == STATUS_SUCCESS, "SeAppendPrivileges failed\n");
-ok((AuxData->PrivilegeSet->PrivilegeCount == 6),"PrivelegeCount must be 6, 
but it is %d\n", AuxData->PrivilegeSet->PrivilegeCount);
+ok_eq_ulong(AuxData->PrivilegeSet->PrivilegeCount, InitialPrivilegeCount + 
5);
 ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 
 ////
@@ -373,7 +375,7 @@ START_TEST(SeQueryInfoToken)
 NewPrivilegeSet->PrivilegeCount = 14;
 
 ok((SeAppendPrivileges(AccessState, NewPrivilegeSet)) == 
STATUS_SUCCESS, "SeAppendPrivileges failed\n");
-ok((AuxData->PrivilegeSet->PrivilegeCount == 20),"PrivelegeCount 
must be 20, but it is %d\n", AuxData->PrivilegeSet->PrivilegeCount);
+ok_eq_ulong(AuxData->PrivilegeSet->PrivilegeCount, 
InitialPrivilegeCount + 19);
 ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 for (i = 0; i < AuxData->PrivilegeSet->PrivilegeCount; i++)
 {


[ros-diffs] [reactos] 02/06: [KMTESTS:SE] Correctly allocate PrivilegeSet buffers.

2024-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=206df96bc474cb154934b43453159079520e0512

commit 206df96bc474cb154934b43453159079520e0512
Author: Thomas Faber 
AuthorDate: Sat May 27 14:01:44 2023 -0400
Commit: Timo Kreuzer 
CommitDate: Thu Sep 12 17:44:13 2024 +0300

[KMTESTS:SE] Correctly allocate PrivilegeSet buffers.
---
 modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c 
b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
index f5f2b0213aa..ae4c50f5561 100644
--- a/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
+++ b/modules/rostests/kmtests/ntos_se/SeQueryInfoToken.c
@@ -282,25 +282,29 @@ START_TEST(SeQueryInfoToken)
 
 //  Testing SeAppendPrivileges. Must change PrivilegeCount to 2 (1 + 1)
 
-NewPrivilegeSet = ExAllocatePool(PagedPool, sizeof(PRIVILEGE_SET));
+NewPrivilegeSet = ExAllocatePoolZero(PagedPool,
+ FIELD_OFFSET(PRIVILEGE_SET, 
Privilege[1]),
+ 'QSmK');
 NewPrivilegeSet->PrivilegeCount = 1;
 
 Status = SeAppendPrivileges(AccessState, NewPrivilegeSet);
 ok(Status == STATUS_SUCCESS, "SeAppendPrivileges failed\n");
 ok((AuxData->PrivilegeSet->PrivilegeCount == 2),"PrivelegeCount must be 2, 
but it is %d\n", AuxData->PrivilegeSet->PrivilegeCount);
-ExFreePool(NewPrivilegeSet);
+ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 
 ////
 
 // Testing SeAppendPrivileges. Must change PrivilegeCount to 6 (2 + 4)
 
-NewPrivilegeSet = ExAllocatePool(PagedPool, 4*sizeof(PRIVILEGE_SET));
+NewPrivilegeSet = ExAllocatePoolZero(PagedPool,
+ FIELD_OFFSET(PRIVILEGE_SET, 
Privilege[4]),
+ 'QSmK');
 NewPrivilegeSet->PrivilegeCount = 4;
 
 Status = SeAppendPrivileges(AccessState, NewPrivilegeSet);
 ok(Status == STATUS_SUCCESS, "SeAppendPrivileges failed\n");
 ok((AuxData->PrivilegeSet->PrivilegeCount == 6),"PrivelegeCount must be 6, 
but it is %d\n", AuxData->PrivilegeSet->PrivilegeCount);
-ExFreePool(NewPrivilegeSet);
+ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 
 ////
 //  Testing SePrivilegeCheck  //
@@ -363,12 +367,14 @@ START_TEST(SeQueryInfoToken)
 TPrivileges = (PTOKEN_PRIVILEGES)(Buffer);
 //trace("TPCount = %u\n\n", TPrivileges->PrivilegeCount);
 
-NewPrivilegeSet = ExAllocatePool(PagedPool, 
14*sizeof(PRIVILEGE_SET));
+NewPrivilegeSet = ExAllocatePoolZero(PagedPool,
+ FIELD_OFFSET(PRIVILEGE_SET, 
Privilege[14]),
+ 'QSmK');
 NewPrivilegeSet->PrivilegeCount = 14;
 
 ok((SeAppendPrivileges(AccessState, NewPrivilegeSet)) == 
STATUS_SUCCESS, "SeAppendPrivileges failed\n");
 ok((AuxData->PrivilegeSet->PrivilegeCount == 20),"PrivelegeCount 
must be 20, but it is %d\n", AuxData->PrivilegeSet->PrivilegeCount);
-ExFreePool(NewPrivilegeSet);
+ExFreePoolWithTag(NewPrivilegeSet, 'QSmK');
 for (i = 0; i < AuxData->PrivilegeSet->PrivilegeCount; i++)
 {
 AuxData->PrivilegeSet->Privilege[i].Attributes = 
TPrivileges->Privileges[i].Attributes;


[ros-diffs] [reactos] 01/01: [CRTDLL_APITEST] Oops. Fix that other compiler. CORE-16933

2024-01-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=286d460b45b7d9fcacc4125d1ba3a4daf411b543

commit 286d460b45b7d9fcacc4125d1ba3a4daf411b543
Author: Thomas Faber 
AuthorDate: Fri Jan 12 12:58:27 2024 -0500
Commit: Thomas Faber 
CommitDate: Fri Jan 12 12:58:27 2024 -0500

[CRTDLL_APITEST] Oops. Fix that other compiler. CORE-16933
---
 modules/rostests/apitests/crt/_mbsncmp.c | 20 ++---
 modules/rostests/apitests/crt/_mbsstr.c  | 48 
 2 files changed, 34 insertions(+), 34 deletions(-)

diff --git a/modules/rostests/apitests/crt/_mbsncmp.c 
b/modules/rostests/apitests/crt/_mbsncmp.c
index 7aa099cde3c..836f19afd85 100644
--- a/modules/rostests/apitests/crt/_mbsncmp.c
+++ b/modules/rostests/apitests/crt/_mbsncmp.c
@@ -33,38 +33,38 @@ START_TEST(_mbsncmp)
 ret = _mbsncmp(NULL, NULL, 0);
 ok(ret == 0, "ret = %d\n", ret);
 
-ret = _mbsncmp("a", "c", 0);
+ret = _mbsncmp((const unsigned char *)"a", (const unsigned char *)"c", 0);
 ok(ret == 0, "ret = %d\n", ret);
 
 /* No null checks - length 1 crashes */
 StartSeh()
-(void)_mbsncmp("a", NULL, 1);
+(void)_mbsncmp((const unsigned char *)"a", NULL, 1);
 EndSeh(STATUS_ACCESS_VIOLATION);
 
 StartSeh()
-(void)_mbsncmp(NULL, "c", 1);
+(void)_mbsncmp(NULL, (const unsigned char *)"c", 1);
 EndSeh(STATUS_ACCESS_VIOLATION);
 
 /* Strings longer than or equal to length */
-ret = _mbsncmp("a", "c", 1);
+ret = _mbsncmp((const unsigned char *)"a", (const unsigned char *)"c", 1);
 ok(ret == DIFF_RETURN(-, 2), "ret = %d\n", ret);
 
-ret = _mbsncmp("a", "a", 1);
+ret = _mbsncmp((const unsigned char *)"a", (const unsigned char *)"a", 1);
 ok(ret == 0, "ret = %d\n", ret);
 
-ret = _mbsncmp("ab", "aB", 1);
+ret = _mbsncmp((const unsigned char *)"ab", (const unsigned char *)"aB", 
1);
 ok(ret == 0, "ret = %d\n", ret);
 
-ret = _mbsncmp("aa", "ac", 2);
+ret = _mbsncmp((const unsigned char *)"aa", (const unsigned char *)"ac", 
2);
 ok(ret == DIFF_RETURN(-, 2), "ret = %d\n", ret);
 
 /* Length longer than one of the strings */
-ret = _mbsncmp("a", "ac", 2);
+ret = _mbsncmp((const unsigned char *)"a", (const unsigned char *)"ac", 2);
 ok(ret == DIFF_RETURN(-, 'c'), "ret = %d\n", ret);
 
-ret = _mbsncmp("aa", "a", 2);
+ret = _mbsncmp((const unsigned char *)"aa", (const unsigned char *)"a", 2);
 ok(ret == DIFF_RETURN(+, 'a'), "ret = %d\n", ret);
 
-ret = _mbsncmp("ab", "ab", 100);
+ret = _mbsncmp((const unsigned char *)"ab", (const unsigned char *)"ab", 
100);
 ok(ret == 0, "ret = %d\n", ret);
 }
diff --git a/modules/rostests/apitests/crt/_mbsstr.c 
b/modules/rostests/apitests/crt/_mbsstr.c
index fc926c1cee8..d06d6184ec4 100644
--- a/modules/rostests/apitests/crt/_mbsstr.c
+++ b/modules/rostests/apitests/crt/_mbsstr.c
@@ -22,27 +22,27 @@ START_TEST(_mbsstr)
 EndSeh(STATUS_ACCESS_VIOLATION);
 
 StartSeh()
-haystack = "hello";
+haystack = (unsigned char *)"hello";
 (void)_mbsstr(haystack, NULL);
 EndSeh(STATUS_ACCESS_VIOLATION);
 
 StartSeh()
-haystack = "";
+haystack = (unsigned char *)"";
 (void)_mbsstr(haystack, NULL);
 EndSeh(STATUS_ACCESS_VIOLATION);
 
 /* Empty needle returns haystack, empty haystack returns NULL... */
-haystack = "hello";
-ret = _mbsstr(haystack, "");
+haystack = (unsigned char *)"hello";
+ret = _mbsstr(haystack, (const unsigned char *)"");
 ok(ret == haystack, "ret = %p, haystack = %p\n", ret, haystack);
 
-haystack = "";
-ret = _mbsstr(haystack, "a");
+haystack = (unsigned char *)"";
+ret = _mbsstr(haystack, (const unsigned char *)"a");
 ok(ret == NULL, "ret = %p, haystack = %p\n", ret, haystack);
 
 /* ... but if both are empty, behavior differs */
-haystack = "";
-ret = _mbsstr(haystack, "");
+haystack = (unsigned char *)"";
+ret = _mbsstr(haystack, (const unsigned char *)"");
 #ifdef TEST_CRTDLL
 ok(ret == NULL, "ret = %p, haystack = %p\n", ret, haystack);
 #else
@@ -50,38 +50,38 @@ START_TEST(_mbsstr)
 #endif
 
 /* Simple "found" cases */
-haystack = "abcdefg";
-ret = _mbsstr(haystack, "abc");
+haystack = (unsigned char *)&

[ros-diffs] [reactos] 01/01: [CRT_APITEST] Add tests for _mbsncmp and _mbsstr. CORE-16933

2024-01-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c8aba5a172da641b47dedb2ed708c574027b873f

commit c8aba5a172da641b47dedb2ed708c574027b873f
Author: Thomas Faber 
AuthorDate: Fri Jan 12 12:31:12 2024 -0500
Commit: Thomas Faber 
CommitDate: Fri Jan 12 12:36:43 2024 -0500

[CRT_APITEST] Add tests for _mbsncmp and _mbsstr. CORE-16933
---
 modules/rostests/apitests/crt/_mbsncmp.c   | 70 +
 modules/rostests/apitests/crt/_mbsstr.c| 87 ++
 .../rostests/apitests/crt/crtdll_crt_apitest.cmake |  4 +-
 .../rostests/apitests/crt/msvcrt_crt_apitest.cmake |  4 +-
 modules/rostests/apitests/crt/testlist.c   |  4 +
 5 files changed, 165 insertions(+), 4 deletions(-)

diff --git a/modules/rostests/apitests/crt/_mbsncmp.c 
b/modules/rostests/apitests/crt/_mbsncmp.c
new file mode 100644
index 000..7aa099cde3c
--- /dev/null
+++ b/modules/rostests/apitests/crt/_mbsncmp.c
@@ -0,0 +1,70 @@
+/*
+ * PROJECT: ReactOS API tests
+ * LICENSE: LGPL-2.1-or-later 
(https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Tests for _mbsncmp
+ * COPYRIGHT:   Copyright 2024 Thomas Faber (thomas.fa...@reactos.org)
+ */
+
+#include 
+#include 
+#define WIN32_NO_STATUS
+#include 
+#include 
+
+/*
+ * cmp functions can either return 1/-1 or the actual difference between the
+ * first two differing characters.
+ * On Win2003, both crtdll and msvcrt always return 1/-1.
+ * On Win10, msvcrt returns the diff, crtdll returns 1/-1.
+ */
+#ifdef TEST_CRTDLL
+#define RETURN_DIFF 0
+#else
+#define RETURN_DIFF (GetVersion() >= 0x0600)
+#endif
+
+#define DIFF_RETURN(sign, absolute) (sign (RETURN_DIFF ? absolute : 1))
+
+START_TEST(_mbsncmp)
+{
+int ret;
+
+/* Zero length always returns true */
+ret = _mbsncmp(NULL, NULL, 0);
+ok(ret == 0, "ret = %d\n", ret);
+
+ret = _mbsncmp("a", "c", 0);
+ok(ret == 0, "ret = %d\n", ret);
+
+/* No null checks - length 1 crashes */
+StartSeh()
+(void)_mbsncmp("a", NULL, 1);
+EndSeh(STATUS_ACCESS_VIOLATION);
+
+StartSeh()
+(void)_mbsncmp(NULL, "c", 1);
+EndSeh(STATUS_ACCESS_VIOLATION);
+
+/* Strings longer than or equal to length */
+ret = _mbsncmp("a", "c", 1);
+ok(ret == DIFF_RETURN(-, 2), "ret = %d\n", ret);
+
+ret = _mbsncmp("a", "a", 1);
+ok(ret == 0, "ret = %d\n", ret);
+
+ret = _mbsncmp("ab", "aB", 1);
+ok(ret == 0, "ret = %d\n", ret);
+
+ret = _mbsncmp("aa", "ac", 2);
+ok(ret == DIFF_RETURN(-, 2), "ret = %d\n", ret);
+
+/* Length longer than one of the strings */
+ret = _mbsncmp("a", "ac", 2);
+ok(ret == DIFF_RETURN(-, 'c'), "ret = %d\n", ret);
+
+ret = _mbsncmp("aa", "a", 2);
+ok(ret == DIFF_RETURN(+, 'a'), "ret = %d\n", ret);
+
+ret = _mbsncmp("ab", "ab", 100);
+ok(ret == 0, "ret = %d\n", ret);
+}
diff --git a/modules/rostests/apitests/crt/_mbsstr.c 
b/modules/rostests/apitests/crt/_mbsstr.c
new file mode 100644
index 000..fc926c1cee8
--- /dev/null
+++ b/modules/rostests/apitests/crt/_mbsstr.c
@@ -0,0 +1,87 @@
+/*
+ * PROJECT: ReactOS API tests
+ * LICENSE: LGPL-2.1-or-later 
(https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Tests for _mbsstr
+ * COPYRIGHT:   Copyright 2024 Thomas Faber (thomas.fa...@reactos.org)
+ */
+
+#include 
+#include 
+#define WIN32_NO_STATUS
+#include 
+#include 
+
+START_TEST(_mbsstr)
+{
+unsigned char *haystack;
+unsigned char *ret;
+
+/* NULL pointers are not handled */
+StartSeh()
+(void)_mbsstr(NULL, NULL);
+EndSeh(STATUS_ACCESS_VIOLATION);
+
+StartSeh()
+haystack = "hello";
+(void)_mbsstr(haystack, NULL);
+EndSeh(STATUS_ACCESS_VIOLATION);
+
+StartSeh()
+haystack = "";
+(void)_mbsstr(haystack, NULL);
+EndSeh(STATUS_ACCESS_VIOLATION);
+
+/* Empty needle returns haystack, empty haystack returns NULL... */
+haystack = "hello";
+ret = _mbsstr(haystack, "");
+ok(ret == haystack, "ret = %p, haystack = %p\n", ret, haystack);
+
+haystack = "";
+ret = _mbsstr(haystack, "a");
+ok(ret == NULL, "ret = %p, haystack = %p\n", ret, haystack);
+
+/* ... but if both are empty, behavior differs */
+haystack = "";
+ret = _mbsstr(haystack, "");
+#ifdef TEST_CRTDLL
+ok(ret == NULL, "ret = %p, haystack = %p\n", ret, haystack);
+#else
+ok(ret == haystack, "ret = %p, haystack = %p\n", ret, haystack);
+#endif
+
+/* Simple "found" cases */
+haystack = "abcdefg";
+  

[ros-diffs] [reactos] 01/01: [WIN32K:NTUSER] Avoid TOCTOU in ProbeAndCaptureUnicodeStringOrAtom.

2023-09-09 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f9212e4a72a45b04ddd13fca63fb90c78eebf053

commit f9212e4a72a45b04ddd13fca63fb90c78eebf053
Author: Thomas Faber 
AuthorDate: Sat Sep 9 08:59:57 2023 -0400
Commit: Thomas Faber 
CommitDate: Sat Sep 9 17:50:49 2023 -0400

[WIN32K:NTUSER] Avoid TOCTOU in ProbeAndCaptureUnicodeStringOrAtom.
---
 win32ss/user/ntuser/class.c | 17 ++---
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/win32ss/user/ntuser/class.c b/win32ss/user/ntuser/class.c
index 90746db3da2..548bef255e6 100644
--- a/win32ss/user/ntuser/class.c
+++ b/win32ss/user/ntuser/class.c
@@ -152,32 +152,35 @@ ProbeAndCaptureUnicodeStringOrAtom(
 __in_data_source(USER_MODE) _In_ PUNICODE_STRING pustrUnsafe)
 {
 NTSTATUS Status = STATUS_SUCCESS;
+UNICODE_STRING ustrCopy;
 
 /* Default to NULL */
-pustrOut->Buffer = NULL;
+RtlInitEmptyUnicodeString(pustrOut, NULL, 0);
 
 _SEH2_TRY
 {
 ProbeForRead(pustrUnsafe, sizeof(UNICODE_STRING), 1);
 
+ustrCopy = *pustrUnsafe;
+
 /* Validate the string */
-if ((pustrUnsafe->Length & 1) || (pustrUnsafe->Buffer == NULL))
+if ((ustrCopy.Length & 1) || (ustrCopy.Buffer == NULL))
 {
 /* This is not legal */
 _SEH2_YIELD(return STATUS_INVALID_PARAMETER);
 }
 
 /* Check if this is an atom */
-if (IS_ATOM(pustrUnsafe->Buffer))
+if (IS_ATOM(ustrCopy.Buffer))
 {
 /* Copy the atom, length is 0 */
 pustrOut->MaximumLength = pustrOut->Length = 0;
-pustrOut->Buffer = pustrUnsafe->Buffer;
+pustrOut->Buffer = ustrCopy.Buffer;
 }
 else
 {
 /* Get the length, maximum length includes zero termination */
-pustrOut->Length = pustrUnsafe->Length;
+pustrOut->Length = ustrCopy.Length;
 pustrOut->MaximumLength = pustrOut->Length + sizeof(WCHAR);
 
 /* Allocate a buffer */
@@ -190,8 +193,8 @@ ProbeAndCaptureUnicodeStringOrAtom(
 }
 
 /* Copy the string and zero terminate it */
-ProbeForRead(pustrUnsafe->Buffer, pustrOut->Length, 1);
-RtlCopyMemory(pustrOut->Buffer, pustrUnsafe->Buffer, 
pustrOut->Length);
+ProbeForRead(ustrCopy.Buffer, pustrOut->Length, 1);
+RtlCopyMemory(pustrOut->Buffer, ustrCopy.Buffer, pustrOut->Length);
 pustrOut->Buffer[pustrOut->Length / sizeof(WCHAR)] = L'\0';
 }
 }


[ros-diffs] [reactos] 01/01: [WS2_32_APITEST] Test overlapping recv overread. CORE-18328

2023-03-19 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=996713515bdbf15a4e25a656360400942e33

commit 996713515bdbf15a4e25a656360400942e33
Author: Thomas Faber 
AuthorDate: Sun Mar 19 12:39:09 2023 -0400
Commit: Thomas Faber 
CommitDate: Sun Mar 19 12:39:09 2023 -0400

[WS2_32_APITEST] Test overlapping recv overread. CORE-18328
---
 modules/rostests/apitests/ws2_32/recv.c | 175 
 1 file changed, 158 insertions(+), 17 deletions(-)

diff --git a/modules/rostests/apitests/ws2_32/recv.c 
b/modules/rostests/apitests/ws2_32/recv.c
index c64fdbbea1d..80ad202a0fc 100644
--- a/modules/rostests/apitests/ws2_32/recv.c
+++ b/modules/rostests/apitests/ws2_32/recv.c
@@ -132,6 +132,16 @@ static void Test_Overread(void)
 int ret;
 int error;
 int len;
+struct
+{
+char buffer[32];
+DWORD flags;
+WSAOVERLAPPED overlapped;
+} receivers[4] = { 0 };
+DWORD bytesTransferred;
+DWORD flags;
+WSABUF wsaBuf;
+size_t i;
 
 ret = WSAStartup(MAKEWORD(2, 2), &wsaData);
 if (ret != 0)
@@ -141,10 +151,9 @@ static void Test_Overread(void)
 }
 
 ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-if (ListeningSocket == INVALID_SOCKET || ClientSocket == INVALID_SOCKET)
+if (ListeningSocket == INVALID_SOCKET)
 {
-skip("Failed to create sockets, error %d\n", WSAGetLastError());
+skip("Failed to create listening socket, error %d\n", 
WSAGetLastError());
 goto Exit;
 }
 
@@ -175,6 +184,16 @@ static void Test_Overread(void)
 }
 ok(len == sizeof(address), "getsocketname length %d\n", len);
 
+/**
+ * Test 1: non-overlapped client socket
+ */
+ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+if (ClientSocket == INVALID_SOCKET)
+{
+skip("Failed to create client socket, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
 ret = connect(ClientSocket, (SOCKADDR *)&address, sizeof(address));
 if (ret == SOCKET_ERROR)
 {
@@ -202,38 +221,160 @@ static void Test_Overread(void)
 
 memset(buffer, 0, sizeof(buffer));
 ret = recv(ClientSocket, buffer, sizeof(buffer), 0);
-if (ret == SOCKET_ERROR)
-{
-skip("Failed to receive from socket (1), error %d\n", 
WSAGetLastError());
-goto Exit;
-}
 error = WSAGetLastError();
 ok(ret == 4, "recv (1) returned %d\n", ret);
-ok(error == NO_ERROR, "recv (1) returned error %d\n", ret);
+ok(error == NO_ERROR, "recv (1) returned error %d\n", error);
 buffer[4] = 0;
 ok(!strcmp(buffer, "blah"), "recv (1) returned data: %s\n", buffer);
 
 ret = recv(ClientSocket, buffer, sizeof(buffer), 0);
+error = WSAGetLastError();
+ok(ret == 0, "recv (2) returned %d\n", ret);
+ok(error == NO_ERROR, "recv (2) returned error %d\n", error);
+
+ret = recv(ClientSocket, buffer, sizeof(buffer), 0);
+error = WSAGetLastError();
+ok(ret == 0, "recv (3) returned %d\n", ret);
+ok(error == NO_ERROR, "recv (3) returned error %d\n", error);
+
+closesocket(ClientSocket);
+
+/**
+ * Test 2: overlapped client socket with multiple pending receives
+ */
+ClientSocket = WSASocketW(AF_INET,
+  SOCK_STREAM,
+  IPPROTO_TCP,
+  NULL,
+  0,
+  WSA_FLAG_OVERLAPPED);
+if (ClientSocket == INVALID_SOCKET)
+{
+skip("Failed to create overlapped client socket, error %d\n", 
WSAGetLastError());
+goto Exit;
+}
+
+ret = connect(ClientSocket, (SOCKADDR *)&address, sizeof(address));
 if (ret == SOCKET_ERROR)
 {
-skip("Failed to receive from socket (2), error %d\n", 
WSAGetLastError());
+skip("Failed to connect to socket, error %d\n", WSAGetLastError());
 goto Exit;
 }
-error = WSAGetLastError();
-ok(ret == 0, "recv (2) returned %d\n", ret);
-ok(error == NO_ERROR, "recv (2) returned error %d\n", ret);
 
-ret = recv(ClientSocket, buffer, sizeof(buffer), 0);
+ServerSocket = accept(ListeningSocket, NULL, NULL);
+if (ServerSocket == INVALID_SOCKET)
+{
+skip("Failed to accept client socket, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
+/* Start overlapping receive calls */
+for (i = 0; i < RTL_NU

[ros-diffs] [reactos] 01/01: [WS2_32_APITEST] Add a test for recv overread. CORE-18328

2023-03-19 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7ca1d0e161cdbff7b694100f73d642e704faf3af

commit 7ca1d0e161cdbff7b694100f73d642e704faf3af
Author: Thomas Faber 
AuthorDate: Sun Mar 19 09:26:24 2023 -0400
Commit: Thomas Faber 
CommitDate: Sun Mar 19 10:02:16 2023 -0400

[WS2_32_APITEST] Add a test for recv overread. CORE-18328
---
 modules/rostests/apitests/ws2_32/recv.c | 144 +++-
 1 file changed, 140 insertions(+), 4 deletions(-)

diff --git a/modules/rostests/apitests/ws2_32/recv.c 
b/modules/rostests/apitests/ws2_32/recv.c
index 9721280b7a3..c64fdbbea1d 100644
--- a/modules/rostests/apitests/ws2_32/recv.c
+++ b/modules/rostests/apitests/ws2_32/recv.c
@@ -1,8 +1,11 @@
 /*
- * PROJECT: ReactOS api tests
- * LICENSE: GPL - See COPYING in the top level directory
- * PURPOSE: Test for recv
- * PROGRAMMERS: Colin Finck
+ * PROJECT: ReactOS API Tests
+ * LICENSE: GPL - See COPYING in the top level directory
+ * PURPOSE: Test for recv
+ * COPYRIGHT:   Copyright 2008 Colin Finck (co...@reactos.org)
+ *  Copyright 2010 Timo Kreuzer (timo.kreu...@reactos.org)
+ *  Copyright 2012 Cameron Gutman (cameron.gut...@reactos.org)
+ *  Copyright 2023 Thomas Faber (thomas.fa...@reactos.org)
  */
 
 #include "ws2_32.h"
@@ -118,8 +121,141 @@ int Test_recv()
 return 1;
 }
 
+static void Test_Overread(void)
+{
+WSADATA wsaData;
+SOCKET ListeningSocket = INVALID_SOCKET;
+SOCKET ServerSocket = INVALID_SOCKET;
+SOCKET ClientSocket = INVALID_SOCKET;
+SOCKADDR_IN address;
+char buffer[32];
+int ret;
+int error;
+int len;
+
+ret = WSAStartup(MAKEWORD(2, 2), &wsaData);
+if (ret != 0)
+{
+skip("Failed to initialize WinSock, error %d\n", ret);
+goto Exit;
+}
+
+ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+if (ListeningSocket == INVALID_SOCKET || ClientSocket == INVALID_SOCKET)
+{
+skip("Failed to create sockets, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
+/* Bind to random port */
+address.sin_family = AF_INET;
+address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+address.sin_port = 0;
+ret = bind(ListeningSocket, (SOCKADDR *)&address, sizeof(address));
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to bind socket, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
+ret = listen(ListeningSocket, 1);
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to listen on socket, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
+len = sizeof(address);
+ret = getsockname(ListeningSocket, (SOCKADDR *)&address, &len);
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to get listening port on socket, error %d\n", 
WSAGetLastError());
+goto Exit;
+}
+ok(len == sizeof(address), "getsocketname length %d\n", len);
+
+ret = connect(ClientSocket, (SOCKADDR *)&address, sizeof(address));
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to connect to socket, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
+ServerSocket = accept(ListeningSocket, NULL, NULL);
+if (ServerSocket == INVALID_SOCKET)
+{
+skip("Failed to accept client socket, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
+ret = send(ServerSocket, "blah", 4, 0);
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to send to socket, error %d\n", WSAGetLastError());
+goto Exit;
+}
+
+ret = closesocket(ServerSocket);
+ServerSocket = INVALID_SOCKET;
+ok(ret == 0, "Failed to close socket with %d\n", WSAGetLastError());
+
+memset(buffer, 0, sizeof(buffer));
+ret = recv(ClientSocket, buffer, sizeof(buffer), 0);
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to receive from socket (1), error %d\n", 
WSAGetLastError());
+goto Exit;
+}
+error = WSAGetLastError();
+ok(ret == 4, "recv (1) returned %d\n", ret);
+ok(error == NO_ERROR, "recv (1) returned error %d\n", ret);
+buffer[4] = 0;
+ok(!strcmp(buffer, "blah"), "recv (1) returned data: %s\n", buffer);
+
+ret = recv(ClientSocket, buffer, sizeof(buffer), 0);
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to receive from socket (2), error %d\n", 
WSAGetLastError());
+goto Exit;
+}
+error = WSAGetLastError();
+ok(ret == 0, "recv (2) returned %d\n", ret);
+ok(error == NO_ERROR, "recv (2) returned error %d\n", ret);
+
+ret = recv(ClientSocket, buffer, sizeof(buffer), 0);
+if (ret == SOCKET_ERROR)
+{
+skip("Failed to receive from so

[ros-diffs] [reactos] 01/01: [WINESYNC] user32/edit: Allow buffer access after EM_GETHANDLE.

2023-03-07 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8e0c920fd2649b1127abe37b88f5753647df5d7d

commit 8e0c920fd2649b1127abe37b88f5753647df5d7d
Author: Thomas Faber 
AuthorDate: Sun Mar 5 14:42:22 2023 -0500
Commit: Thomas Faber 
CommitDate: Tue Mar 7 21:48:06 2023 -0500

[WINESYNC] user32/edit: Allow buffer access after EM_GETHANDLE.

wine commit id f62d8dc58fb3fb5f11a8ab55620ab9b2fbdaf967 by Nikolay Sivov 

---
 win32ss/user/user32/controls/edit.c | 12 
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/win32ss/user/user32/controls/edit.c 
b/win32ss/user/user32/controls/edit.c
index a65a4d6dab3..46a0ed5b8b7 100644
--- a/win32ss/user/user32/controls/edit.c
+++ b/win32ss/user/user32/controls/edit.c
@@ -1293,8 +1293,6 @@ static inline void text_buffer_changed(EDITSTATE *es)
  */
 static void EDIT_LockBuffer(EDITSTATE *es)
 {
-if (es->hlocapp) return;
-
if (!es->text) {
 
 #ifdef __REACTOS__
@@ -1358,8 +1356,6 @@ static void EDIT_LockBuffer(EDITSTATE *es)
  */
 static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force)
 {
-if (es->hlocapp) return;
-
/* Edit window might be already destroyed */
if(!IsWindow(es->hwndSelf))
{
@@ -5346,12 +5342,12 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, 
WPARAM wParam, LPARAM lP
}
 
 #ifdef __REACTOS__
-   /* ReactOS: check GetWindowLong in case es has been destroyed during 
processing */
-   if (IsWindow(hwnd) && es && GetWindowLongPtrW(hwnd, 0))
-   EDIT_UnlockBuffer(es, FALSE);
+/* ReactOS: check GetWindowLong in case es has been destroyed during 
processing */
+if (IsWindow(hwnd) && es && msg != EM_GETHANDLE && 
GetWindowLongPtrW(hwnd, 0))
 #else
-   if (IsWindow(hwnd) && es) EDIT_UnlockBuffer(es, FALSE);
+if (IsWindow(hwnd) && es && msg != EM_GETHANDLE)
 #endif
+EDIT_UnlockBuffer(es, FALSE);
 
 TRACE("hwnd=%p msg=%x (%s) -- 0x%08lx\n", hwnd, msg, 
SPY_GetMsgName(msg, hwnd), result);
 


[ros-diffs] [reactos] 01/01: [REGEDIT] Avoid buffer overflow in SelectNode. CORE-18602

2023-03-07 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1ee9ea451861f4059937ddb78070700950b95d43

commit 1ee9ea451861f4059937ddb78070700950b95d43
Author: Thomas Faber 
AuthorDate: Thu Jan 19 20:34:46 2023 -0500
Commit: Thomas Faber 
CommitDate: Tue Mar 7 19:43:57 2023 -0500

[REGEDIT] Avoid buffer overflow in SelectNode. CORE-18602
---
 base/applications/regedit/regedit.h  |  1 +
 base/applications/regedit/treeview.c | 25 +
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/base/applications/regedit/regedit.h 
b/base/applications/regedit/regedit.h
index 2549aee7b73..d1decef5893 100644
--- a/base/applications/regedit/regedit.h
+++ b/base/applications/regedit/regedit.h
@@ -9,6 +9,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include "main.h"
 #include "hexedit.h"
diff --git a/base/applications/regedit/treeview.c 
b/base/applications/regedit/treeview.c
index 7719039e835..ee26a04538a 100644
--- a/base/applications/regedit/treeview.c
+++ b/base/applications/regedit/treeview.c
@@ -781,7 +781,7 @@ BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
 
 /* Load "My Computer" string... */
 LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, ARRAY_SIZE(szBuffer));
-wcscat(szBuffer, L"\\");
+StringCbCatW(szBuffer, sizeof(szBuffer), L"\\");
 
 /* ... and remove it from the key path */
 if (!_wcsnicmp(keyPath, szBuffer, wcslen(szBuffer)))
@@ -795,24 +795,33 @@ BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath)
 
 while(keyPath[0])
 {
+size_t copyLength;
 s = wcschr(keyPath, L'\\');
-lstrcpynW(szPathPart, keyPath, s ? s - keyPath + 1 : wcslen(keyPath) + 
1);
+if (s != NULL)
+{
+copyLength = (s - keyPath) * sizeof(WCHAR);
+}
+else
+{
+copyLength = sizeof(szPathPart);
+}
+StringCbCopyNW(szPathPart, sizeof(szPathPart), keyPath, copyLength);
 
 /* Special case for root to expand root key abbreviations */
 if (hItem == hRoot)
 {
 if (!_wcsicmp(szPathPart, L"HKCR"))
-wcscpy(szPathPart, L"HKEY_CLASSES_ROOT");
+StringCbCopyW(szPathPart, sizeof(szPathPart), 
L"HKEY_CLASSES_ROOT");
 else if (!_wcsicmp(szPathPart, L"HKCU"))
-wcscpy(szPathPart, L"HKEY_CURRENT_USER");
+StringCbCopyW(szPathPart, sizeof(szPathPart), 
L"HKEY_CURRENT_USER");
 else if (!_wcsicmp(szPathPart, L"HKLM"))
-wcscpy(szPathPart, L"HKEY_LOCAL_MACHINE");
+StringCbCopyW(szPathPart, sizeof(szPathPart), 
L"HKEY_LOCAL_MACHINE");
 else if (!_wcsicmp(szPathPart, L"HKU"))
-wcscpy(szPathPart, L"HKEY_USERS");
+StringCbCopyW(szPathPart, sizeof(szPathPart), L"HKEY_USERS");
 else if (!_wcsicmp(szPathPart, L"HKCC"))
-wcscpy(szPathPart, L"HKEY_CURRENT_CONFIG");
+StringCbCopyW(szPathPart, sizeof(szPathPart), 
L"HKEY_CURRENT_CONFIG");
 else if (!_wcsicmp(szPathPart, L"HKDD"))
-wcscpy(szPathPart, L"HKEY_DYN_DATA");
+StringCbCopyW(szPathPart, sizeof(szPathPart), 
L"HKEY_DYN_DATA");
 }
 
 for (hChildItem = TreeView_GetChild(hwndTV, hItem); hChildItem;


[ros-diffs] [reactos] 01/01: [REGEDIT] Add back import prompt message lost during Wine sync. CORE-18770

2023-03-07 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=910822b8f5ffae49f25486786dc248e287948366

commit 910822b8f5ffae49f25486786dc248e287948366
Author: Thomas Faber 
AuthorDate: Sat Mar 4 16:51:57 2023 -0500
Commit: Thomas Faber 
CommitDate: Tue Mar 7 19:41:51 2023 -0500

[REGEDIT] Add back import prompt message lost during Wine sync. CORE-18770
---
 base/applications/regedit/regedit.c | 50 +
 1 file changed, 50 insertions(+)

diff --git a/base/applications/regedit/regedit.c 
b/base/applications/regedit/regedit.c
index 573a6341433..35fa13f037d 100644
--- a/base/applications/regedit/regedit.c
+++ b/base/applications/regedit/regedit.c
@@ -123,7 +123,11 @@ typedef enum {
 ACTION_ADD, ACTION_EXPORT, ACTION_DELETE
 } REGEDIT_ACTION;
 
+#ifdef __REACTOS__
+static void PerformRegAction(REGEDIT_ACTION action, WCHAR **argv, int *i, BOOL 
silent)
+#else
 static void PerformRegAction(REGEDIT_ACTION action, WCHAR **argv, int *i)
+#endif
 {
 switch (action) {
 case ACTION_ADD: {
@@ -131,6 +135,41 @@ static void PerformRegAction(REGEDIT_ACTION action, WCHAR 
**argv, int *i)
 WCHAR *realname = NULL;
 FILE *reg_file;
 
+#ifdef __REACTOS__
+/* Request import confirmation */
+if (!silent)
+{
+WCHAR szText[512];
+int choice;
+UINT mbType = MB_YESNO;
+
+LoadStringW(hInst, IDS_IMPORT_PROMPT, szText, 
ARRAY_SIZE(szText));
+
+if (argv[*i + 1] != NULL)
+{
+/* Enable three buttons if there's another file coming */
+mbType = MB_YESNOCANCEL;
+}
+
+choice = InfoMessageBox(NULL, mbType | MB_ICONQUESTION, 
szTitle, szText, filename);
+switch (choice)
+{
+case IDNO:
+return;
+case IDCANCEL:
+/* The cancel case is useful if the user is importing 
more than one registry file
+ * at a time, and wants to back out anytime during the 
import process. This way, the
+ * user doesn't have to resort to ending the regedit 
process abruptly just to cancel
+ * the operation.
+ * To achieve this, we skip all further command line 
arguments.
+ */
+*i = INT_MAX - 1;
+return;
+default:
+break;
+}
+}
+#endif
 if (!lstrcmpW(filename, L"-"))
 reg_file = stdin;
 else
@@ -190,6 +229,9 @@ BOOL ProcessCmdLine(WCHAR *cmdline)
 WCHAR **argv;
 int argc, i;
 REGEDIT_ACTION action = ACTION_ADD;
+#ifdef __REACTOS__
+BOOL silent = FALSE;
+#endif
 
 argv = CommandLineToArgvW(cmdline, &argc);
 
@@ -231,6 +273,10 @@ BOOL ProcessCmdLine(WCHAR *cmdline)
 /* unhandled */;
 break;
 case 'S':
+#ifdef __REACTOS__
+silent = TRUE;
+break;
+#endif
 case 'V':
 /* ignored */;
 break;
@@ -256,7 +302,11 @@ BOOL ProcessCmdLine(WCHAR *cmdline)
 }
 
 for (; i < argc; i++)
+#ifdef __REACTOS__
+PerformRegAction(action, argv, &i, silent);
+#else
 PerformRegAction(action, argv, &i);
+#endif
 
 LocalFree(argv);
 


[ros-diffs] [reactos] 01/01: [ACPI_APITEST] Mark test failures as todos.

2023-02-01 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d5999c6b66c4779bc71db51df4189e2a465b0ee5

commit d5999c6b66c4779bc71db51df4189e2a465b0ee5
Author: Thomas Faber 
AuthorDate: Wed Feb 1 20:17:28 2023 -0500
Commit: Thomas Faber 
CommitDate: Wed Feb 1 20:20:17 2023 -0500

[ACPI_APITEST] Mark test failures as todos.

This is a true unit test and runs the same code on Windows as it does on
ROS, so this uses unconditional todos rather than todo_ros.
This avoids test failures on Windows and hopefully makes things less
confusing.
---
 modules/rostests/apitests/acpi/Bus_PDO_QueryResourceRequirements.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/modules/rostests/apitests/acpi/Bus_PDO_QueryResourceRequirements.c 
b/modules/rostests/apitests/acpi/Bus_PDO_QueryResourceRequirements.c
index 08a7a13dd4c..695e6f0d42a 100644
--- a/modules/rostests/apitests/acpi/Bus_PDO_QueryResourceRequirements.c
+++ b/modules/rostests/apitests/acpi/Bus_PDO_QueryResourceRequirements.c
@@ -2,7 +2,7 @@
  * PROJECT: ReactOS API Tests
  * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
  * PURPOSE: Unit Tests for acpi!Bus_PDO_QueryResourceRequirements
- * COPYRIGHT:   Copyright 2017-2020 Thomas Faber (thomas.fa...@reactos.org)
+ * COPYRIGHT:   Copyright 2017-2023 Thomas Faber (thomas.fa...@reactos.org)
  */
 
 #include 
@@ -501,6 +501,7 @@ START_TEST(Bus_PDO_QueryResourceRequirements)
 ok(ReqList->InterfaceType == Internal, "InterfaceType = %u\n", 
ReqList->InterfaceType);
 ok(ReqList->BusNumber == 0, "BusNumber = %lu\n", ReqList->BusNumber);
 ok(ReqList->SlotNumber == 0, "SlotNumber = %lu\n", ReqList->SlotNumber);
+todo_if(1)
 ok(ReqList->AlternativeLists == 2, "AlternativeLists = %lu\n", 
ReqList->AlternativeLists);
 ok(ReqList->List[0].Version == 1, "List[0].Version = %u\n", 
ReqList->List[0].Version);
 ok(ReqList->List[0].Revision == 1, "List[0].Revision = %u\n", 
ReqList->List[0].Revision);
@@ -525,6 +526,7 @@ START_TEST(Bus_PDO_QueryResourceRequirements)
 expect_irq(&ReqList2->Descriptors[5], IO_RESOURCE_ALTERNATIVE, 
CmResourceShareDeviceExclusive, 7, 7);
 }
 ok_int(ReqList->ListSize, GetPoolAllocSize(ReqList));
+todo_if(1)
 ok_int(ReqList->ListSize, (ULONG_PTR)&ReqList2->Descriptors[6] - 
(ULONG_PTR)ReqList);
 ExFreePoolWithTag(ReqList, 'RpcA');
 }


[ros-diffs] [reactos] 01/01: [KMTESTS:IO] Fix some failures in IoDeviceObject test. ROSTESTS-380

2023-02-01 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=04b35ecc234e9aa8c82b6784ac184035cd1f9448

commit 04b35ecc234e9aa8c82b6784ac184035cd1f9448
Author: Thomas Faber 
AuthorDate: Wed Feb 1 19:35:16 2023 -0500
Commit: Thomas Faber 
CommitDate: Wed Feb 1 20:05:57 2023 -0500

[KMTESTS:IO] Fix some failures in IoDeviceObject test. ROSTESTS-380
---
 modules/rostests/kmtests/include/kmt_test.h|  1 +
 modules/rostests/kmtests/kmtest/support.c  | 18 ++
 modules/rostests/kmtests/ntos_io/IoDeviceObject_drv.c  | 17 +
 modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c | 13 -
 modules/rostests/kmtests/ntos_ke/KeSpinLock.c  |  2 +-
 5 files changed, 37 insertions(+), 14 deletions(-)

diff --git a/modules/rostests/kmtests/include/kmt_test.h 
b/modules/rostests/kmtests/include/kmt_test.h
index c046ab05874..4f25d6580b8 100644
--- a/modules/rostests/kmtests/include/kmt_test.h
+++ b/modules/rostests/kmtests/include/kmt_test.h
@@ -170,6 +170,7 @@ VOID KmtFinishThread(IN PKTHREAD Thread OPTIONAL, IN 
PKEVENT Event OPTIONAL);
 DWORD KmtRunKernelTest(IN PCSTR TestName);
 
 DWORD KmtLoadDriver(IN PCWSTR ServiceName, IN BOOLEAN RestartIfRunning);
+VOID KmtUnloadDriverKeepService(VOID);
 VOID KmtUnloadDriver(VOID);
 DWORD KmtOpenDriver(VOID);
 VOID KmtCloseDriver(VOID);
diff --git a/modules/rostests/kmtests/kmtest/support.c 
b/modules/rostests/kmtests/kmtest/support.c
index 4cfa4bae9b8..0bb60eb3532 100644
--- a/modules/rostests/kmtests/kmtest/support.c
+++ b/modules/rostests/kmtests/kmtest/support.c
@@ -140,6 +140,24 @@ KmtLoadDriver(
 return KmtCreateAndStartService(TestServiceName, ServicePath, NULL, 
&TestServiceHandle, RestartIfRunning);
 }
 
+/**
+ * @name KmtUnloadDriverKeepService
+ *
+ * Unload special-purpose driver (stop the service only)
+ */
+VOID
+KmtUnloadDriverKeepService(VOID)
+{
+DWORD Error;
+
+Error = KmtStopService(TestServiceName, &TestServiceHandle);
+
+if (Error)
+{
+fprintf(stderr, "Failed to stop %ls service with error 0x%lx\n", 
TestServiceName, Error);
+}
+}
+
 /**
  * @name KmtUnloadDriver
  *
diff --git a/modules/rostests/kmtests/ntos_io/IoDeviceObject_drv.c 
b/modules/rostests/kmtests/ntos_io/IoDeviceObject_drv.c
index c71a0b8599c..c714bc8ab01 100644
--- a/modules/rostests/kmtests/ntos_io/IoDeviceObject_drv.c
+++ b/modules/rostests/kmtests/ntos_io/IoDeviceObject_drv.c
@@ -1,9 +1,9 @@
 /*
- * PROJECT: ReactOS kernel-mode tests
- * LICENSE: GPLv2+ - See COPYING in the top level directory
- * PURPOSE: Kernel-Mode Test Suite Driver Object Test Driver
- * PROGRAMMER:  Michael Martin 
- *      Thomas Faber 
+ * PROJECT: ReactOS kernel-mode tests
+ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE: Kernel-Mode Test Suite Device Object Test Driver
+ * COPYRIGHT:   Copyright 2009 Michael Martin (michael.mar...@reactos.org)
+ * COPYRIGHT:   Copyright 2011-2023 Thomas Faber (thomas.fa...@reactos.org)
  */
 
 #include 
@@ -424,10 +424,11 @@ TestDeviceDeletion(
 DeviceObject->DeviceType);
 ok(DeviceObject->ActiveThreadCount == 0, "Expected ActiveThreadCount = 0, 
got %lu\n", DeviceObject->ActiveThreadCount);
 
-/*Check the extended extension */
+/* Check the extended extension */
 extdev = (PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension;
-ok(extdev->ExtensionFlags == DOE_UNLOAD_PENDING,
-"Expected Extended ExtensionFlags to be DOE_UNLOAD_PENDING, got 
%lu\n", extdev->ExtensionFlags);
+/* FIXME: Windows has the MSB set under some conditions, need to find out 
what this means */
+ok((extdev->ExtensionFlags & 0x7fff) == DOE_UNLOAD_PENDING,
+"Expected Extended ExtensionFlags to be DOE_UNLOAD_PENDING, got 
0x%lx\n", extdev->ExtensionFlags);
 ok (extdev->Type == 13, "Expected Type of 13, got %d\n", extdev->Type);
 ok (extdev->Size == 0, "Expected Size of 0, got %d\n", extdev->Size);
 ok (extdev->DeviceObject == DeviceObject, "Expected DeviceOject to match 
newly created device %p, got %p\n",
diff --git a/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c 
b/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c
index 50d66c58926..e51139191d5 100644
--- a/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c
+++ b/modules/rostests/kmtests/ntos_io/IoDeviceObject_user.c
@@ -1,8 +1,9 @@
 /*
- * PROJECT: ReactOS kernel-mode tests
- * LICENSE: GPLv2+ - See COPYING in the top level directory
- * PURPOSE: Kernel-Mode Test Suite Driver Object test user-mode part
- * PROGRAMMER:  Thomas Faber 
+ * PROJECT: ReactOS kernel-mode tests
+ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE: Kernel-Mode Test Suite Device Object test user-mode part

[ros-diffs] [reactos] 01/01: [KMTESTS:MM] Fix MmReservedMapping test failures on PAE kernels.

2023-01-29 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6b863f63c224a0f03ba3037a2f8027b225149764

commit 6b863f63c224a0f03ba3037a2f8027b225149764
Author: Thomas Faber 
AuthorDate: Sun Jan 29 11:34:45 2023 -0500
Commit: Thomas Faber 
CommitDate: Sun Jan 29 11:39:56 2023 -0500

[KMTESTS:MM] Fix MmReservedMapping test failures on PAE kernels.
---
 .../rostests/kmtests/ntos_mm/MmReservedMapping.c   | 76 --
 1 file changed, 57 insertions(+), 19 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_mm/MmReservedMapping.c 
b/modules/rostests/kmtests/ntos_mm/MmReservedMapping.c
index fd35a208ce3..a8204b5a3c0 100644
--- a/modules/rostests/kmtests/ntos_mm/MmReservedMapping.c
+++ b/modules/rostests/kmtests/ntos_mm/MmReservedMapping.c
@@ -1,33 +1,54 @@
 /*
- * PROJECT: ReactOS kernel-mode tests
- * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
- * PURPOSE: Kernel-Mode Test Suite Reserved Mapping test
- * PROGRAMMER:  Thomas Faber 
+ * PROJECT: ReactOS kernel-mode tests
+ * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Kernel-Mode Test Suite Reserved Mapping test
+ * COPYRIGHT:   Copyright 2015,2023 Thomas Faber (thomas.fa...@reactos.org)
+ * COPYRIGHT:   Copyright 2015 Pierre Schweitzer (pie...@reactos.org)
  */
 
 #include 
 
+static BOOLEAN g_IsPae;
+
 #ifdef _M_IX86
 
+#define IS_PAE() (g_IsPae)
+
 #define PTE_BASE0xC000
-#define MiAddressToPte(x) \
-((PMMPTE)(ULONG)(x)) >> 12) << 2) + PTE_BASE))
-#define MiPteToAddress(_Pte) ((PVOID)((ULONG)(_Pte) << 10))
+
+#define MiAddressToPteX86(x) \
+((PULONG)(ULONG)(x)) >> 12) << 2) + PTE_BASE))
+#define MiAddressToPtePAE(x) \
+((PULONGLONG)(ULONG)(x)) >> 12) << 3) + PTE_BASE))
+
+#define GET_PTE_VALUE_X86(Addr) (*MiAddressToPteX86(Addr))
+#define GET_PTE_VALUE_PAE(Addr) (*MiAddressToPtePAE(Addr))
+#define GET_PTE_VALUE(Addr) (IS_PAE() ? GET_PTE_VALUE_PAE(Addr) : 
GET_PTE_VALUE_X86(Addr))
+
+#define PTE_IS_VALID(PteValue) ((PteValue) & 1)
+
+#define PTE_GET_PFN_X86(PteValue) (((PteValue) >> PAGE_SHIFT) & 0x0fULL)
+#define PTE_GET_PFN_PAE(PteValue) (((PteValue) >> PAGE_SHIFT) & 0xffULL)
+#define PTE_GET_PFN(PteValue) (IS_PAE() ? PTE_GET_PFN_PAE(PteValue) : 
PTE_GET_PFN_X86(PteValue))
 
 #elif defined(_M_AMD64)
 
 #define PTI_SHIFT  12L
 #define PTE_BASE0xF680ULL
-PMMPTE
+PULONGLONG
 FORCEINLINE
 _MiAddressToPte(PVOID Address)
 {
 ULONG64 Offset = (ULONG64)Address >> (PTI_SHIFT - 3);
 Offset &= 0xFULL << 3;
-return (PMMPTE)(PTE_BASE + Offset);
+return (PULONGLONG)(PTE_BASE + Offset);
 }
 #define MiAddressToPte(x) _MiAddressToPte((PVOID)(x))
 
+#define GET_PTE_VALUE(Addr) (*_MiAddressToPte((PVOID)(Addr)))
+#define PTE_IS_VALID(PteValue) ((PteValue) & 1)
+#define PTE_GET_PFN(PteValue) (((PteValue) >> PAGE_SHIFT) & 0xFULL)
+
 #endif
 
 static
@@ -54,30 +75,45 @@ ValidateMapping(
 {
 BOOLEAN Valid = TRUE;
 #if defined(_M_IX86) || defined(_M_AMD64)
-PMMPTE PointerPte;
+PUCHAR CurrentAddress;
+ULONGLONG PteValue;
 ULONG i;
 
-PointerPte = MiAddressToPte(BaseAddress);
 for (i = 0; i < ValidPtes; i++)
 {
+CurrentAddress = (PUCHAR)BaseAddress + i * PAGE_SIZE;
+PteValue = GET_PTE_VALUE(CurrentAddress);
 Valid = Valid &&
-ok(PointerPte[i].u.Hard.Valid == 1,
-   "[%lu] PTE %p is not valid\n", i, &PointerPte[i]);
+ok(PTE_IS_VALID(PteValue),
+   "[%lu] PTE for %p is not valid (0x%I64x)\n",
+   i, CurrentAddress, PteValue);
 
 Valid = Valid &&
-ok(PointerPte[i].u.Hard.PageFrameNumber == Pfns[i],
-   "[%lu] PTE %p has PFN %Ix, expected %Ix\n",
-   i, &PointerPte[i], PointerPte[i].u.Hard.PageFrameNumber, 
Pfns[i]);
+ok(PTE_GET_PFN(PteValue) == Pfns[i],
+   "[%lu] PTE for %p has PFN %Ix, expected %Ix\n",
+   i, CurrentAddress, PTE_GET_PFN(PteValue), Pfns[i]);
 }
 for (; i < TotalPtes; i++)
 {
+CurrentAddress = (PUCHAR)BaseAddress + i * PAGE_SIZE;
+PteValue = GET_PTE_VALUE(CurrentAddress);
 Valid = Valid &&
-ok_eq_hex(PointerPte[i].u.Long, 0UL);
+ok(PteValue == 0,
+   "[%lu] PTE for %p is nonzero (0x%I64x)\n",
+   i, CurrentAddress, PteValue);
 }
+CurrentAddress = (PUCHAR)BaseAddress - 1 * PAGE_SIZE;
+PteValue = GET_PTE_VALUE(CurrentAddress);
 Valid = Valid &&
-ok_eq_tag(PointerPte[-1].u.Long, PoolTag & ~1);
+ok(PteValue == (PoolTag & ~1ULL),
+   "PTE for %p contains 0

[ros-diffs] [reactos] 02/02: [KMTESTS:KE] Correctly handle MP builds in KeSpinLock test.

2023-01-29 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5f1fff696bbc49163eaa709c8e53ae507cc2c196

commit 5f1fff696bbc49163eaa709c8e53ae507cc2c196
Author: Thomas Faber 
AuthorDate: Sat Jan 28 21:54:05 2023 -0500
Commit: Thomas Faber 
CommitDate: Sat Jan 28 23:26:30 2023 -0500

[KMTESTS:KE] Correctly handle MP builds in KeSpinLock test.
---
 modules/rostests/kmtests/ntos_ke/KeSpinLock.c | 38 ---
 1 file changed, 28 insertions(+), 10 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_ke/KeSpinLock.c 
b/modules/rostests/kmtests/ntos_ke/KeSpinLock.c
index 9b16648573f..32f5b8ce351 100644
--- a/modules/rostests/kmtests/ntos_ke/KeSpinLock.c
+++ b/modules/rostests/kmtests/ntos_ke/KeSpinLock.c
@@ -1,8 +1,9 @@
 /*
- * PROJECT: ReactOS kernel-mode tests
- * LICENSE: GPLv2+ - See COPYING in the top level directory
- * PURPOSE: Kernel-Mode Test Suite Spin lock test
- * PROGRAMMER:  Thomas Faber 
+ * PROJECT: ReactOS kernel-mode tests
+ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE: Kernel-Mode Test Suite Spin lock test
+ * COPYRIGHT:   Copyright 2011-2023 Thomas Faber (thomas.fa...@reactos.org)
+ * COPYRIGHT:   Copyright 2021 Jérôme Gardou (jerome.gar...@reactos.org)
  */
 
 #ifndef _WIN64
@@ -265,13 +266,21 @@ TestSpinLock(
 CheckSpinLock(SpinLock, CheckData, 0);
 ok_bool_true(CheckData->TryAcquire(SpinLock, CheckData), "TryAcquire 
returned");
 CheckSpinLock(SpinLock, CheckData, 1);
+/* A second TryToAcquire results in SPINLOCK_ALREADY_OWNED on checked 
builds */
 if (!KmtIsCheckedBuild)
 {
-/* SPINLOCK_ALREADY_OWNED on checked build */
-ok_bool_true(CheckData->TryAcquire(SpinLock, CheckData), 
"TryAcquire returned");
-/* even a failing acquire sets irql */
-ok_eq_uint(CheckData->Irql, CheckData->IrqlWhenAcquired);
-CheckData->Irql = CheckData->OriginalIrql;
+if (KmtIsMultiProcessorBuild)
+{
+/* In MP, this fails as you would expect */
+ok_bool_false(CheckData->TryAcquire(SpinLock, CheckData), 
"TryAcquire returned");
+}
+else
+{
+/* In UP, this always succeeds: recursive acquires are illegal 
and parallel processors don't exist */
+ok_bool_true(CheckData->TryAcquire(SpinLock, CheckData), 
"TryAcquire returned");
+ok_eq_uint(CheckData->Irql, CheckData->IrqlWhenAcquired);
+CheckData->Irql = CheckData->OriginalIrql;
+}
 CheckSpinLock(SpinLock, CheckData, 1);
 }
 CheckData->Release(SpinLock, CheckData);
@@ -312,7 +321,16 @@ TestSpinLock(
 CheckSpinLock(SpinLock, CheckData, 1);
 if (!KmtIsCheckedBuild)
 {
-ok_bool_true(CheckData->TryAcquireNoRaise(SpinLock, 
CheckData), "TryAcquireNoRaise returned");
+if (KmtIsMultiProcessorBuild)
+{
+/* In MP, this fails as you would expect */
+ok_bool_false(CheckData->TryAcquireNoRaise(SpinLock, 
CheckData), "TryAcquireNoRaise returned");
+}
+else
+{
+/* In UP, this always succeeds: recursive acquires are 
illegal and parallel processors don't exist */
+ok_bool_true(CheckData->TryAcquireNoRaise(SpinLock, 
CheckData), "TryAcquireNoRaise returned");
+}
 CheckSpinLock(SpinLock, CheckData, 1);
 }
 CheckData->ReleaseNoLower(SpinLock, CheckData);


[ros-diffs] [reactos] 01/02: [KMTESTS:MM] Fix failures in MmMdl test on machines with 2GB of free RAM.

2023-01-29 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2f63da62e305b6609045bf09ac0d853d610bc2fb

commit 2f63da62e305b6609045bf09ac0d853d610bc2fb
Author: Thomas Faber 
AuthorDate: Sat Jan 28 19:55:19 2023 -0500
Commit: Thomas Faber 
CommitDate: Sat Jan 28 23:17:52 2023 -0500

[KMTESTS:MM] Fix failures in MmMdl test on machines with 2GB of free RAM.
---
 modules/rostests/kmtests/ntos_mm/MmMdl.c | 17 +
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/modules/rostests/kmtests/ntos_mm/MmMdl.c 
b/modules/rostests/kmtests/ntos_mm/MmMdl.c
index 3ee201f5e0d..e84e3b2ecab 100644
--- a/modules/rostests/kmtests/ntos_mm/MmMdl.c
+++ b/modules/rostests/kmtests/ntos_mm/MmMdl.c
@@ -1,8 +1,9 @@
 /*
- * PROJECT: ReactOS kernel-mode tests
- * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
- * PURPOSE: Kernel-Mode Test Suite MDL test
- * PROGRAMMER:  Thomas Faber 
+ * PROJECT: ReactOS kernel-mode tests
+ * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Kernel-Mode Test Suite MDL test
+ * COPYRIGHT:   Copyright 2015,2023 Thomas Faber (thomas.fa...@reactos.org)
+ * COPYRIGHT:   Copyright 2017 Pierre Schweitzer (pie...@reactos.org)
  */
 
 #include 
@@ -104,7 +105,7 @@ TestMmAllocatePagesForMdl(VOID)
 MmFreePagesFromMdl(Mdl);
 ExFreePoolWithTag(Mdl, 0);
 
-/* try to allocate 2 GB -- should succeed but not map */
+/* try to allocate 2 GB -- should succeed (possibly with fewer pages) but 
not map */
 Mdl = MmAllocatePagesForMdl(LowAddress,
 HighAddress,
 SkipBytes,
@@ -112,12 +113,12 @@ TestMmAllocatePagesForMdl(VOID)
 ok(Mdl != NULL, "MmAllocatePagesForMdl failed for 2 GB\n");
 if (Mdl != NULL)
 {
-ok(MmGetMdlByteCount(Mdl) != 2UL * 1024 * 1024 * 1024, "Byte count: 
%lu\n", MmGetMdlByteCount(Mdl));
+ok(MmGetMdlByteCount(Mdl) <= 2UL * 1024 * 1024 * 1024, "Byte count: 
%lu\n", MmGetMdlByteCount(Mdl));
 ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", 
MmGetMdlVirtualAddress(Mdl));
 ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", 
Mdl->MdlFlags);
 MdlPages = MmGetMdlPfnArray(Mdl);
 MdlPageCount = 
ADDRESS_AND_SIZE_TO_SPAN_PAGES(MmGetMdlVirtualAddress(Mdl), 
MmGetMdlByteCount(Mdl));
-ok(MdlPageCount < 2UL * 1024 * 1024 * 1024 / PAGE_SIZE, "MdlPageCount 
= %lu\n", MdlPageCount);
+ok(MdlPageCount <= 2UL * 1024 * 1024 * 1024 / PAGE_SIZE, "MdlPageCount 
= %lu\n", MdlPageCount);
 for (i = 0; i < MdlPageCount; i++)
 {
 if (MdlPages[i] == 0 ||
@@ -135,7 +136,7 @@ TestMmAllocatePagesForMdl(VOID)
 ok(SystemVa == NULL, "MmMapLockedPagesSpecifyCache succeeded for 2 
GB\n");
 if (SystemVa != NULL)
 MmUnmapLockedPages(SystemVa, Mdl);
-ok(MmGetMdlByteCount(Mdl) != 2UL * 1024 * 1024 * 1024, "Byte count: 
%lu\n", MmGetMdlByteCount(Mdl));
+ok(MmGetMdlByteCount(Mdl) <= 2UL * 1024 * 1024 * 1024, "Byte count: 
%lu\n", MmGetMdlByteCount(Mdl));
 ok(MmGetMdlVirtualAddress(Mdl) == NULL, "Virtual address: %p\n", 
MmGetMdlVirtualAddress(Mdl));
 ok(!(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA), "MdlFlags: %lx\n", 
Mdl->MdlFlags);
 MmFreePagesFromMdl(Mdl);


[ros-diffs] [reactos] 01/02: [GDI32] Fix memory leak in case of public DC. CORE-18498

2023-01-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8b19b6ec5abcaf3603e147252fa87fce998ec79e

commit 8b19b6ec5abcaf3603e147252fa87fce998ec79e
Author: Thomas Faber 
AuthorDate: Mon Jan 16 14:24:07 2023 -0500
Commit: Thomas Faber 
CommitDate: Fri Jan 27 22:30:35 2023 -0500

[GDI32] Fix memory leak in case of public DC. CORE-18498
---
 win32ss/gdi/gdi32/objects/bitmap.c | 9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/win32ss/gdi/gdi32/objects/bitmap.c 
b/win32ss/gdi/gdi32/objects/bitmap.c
index 438521f69e9..b029d4ad2df 100644
--- a/win32ss/gdi/gdi32/objects/bitmap.c
+++ b/win32ss/gdi/gdi32/objects/bitmap.c
@@ -756,8 +756,10 @@ SetDIBitsToDevice(
 
 if (!GdiGetHandleUserData(hdc, GDI_OBJECT_TYPE_DC, (PVOID) & pDc_Attr))
 {
+DPRINT1("SetDIBitsToDevice called on invalid DC %p (not owned?)\n", 
hdc);
 SetLastError(ERROR_INVALID_PARAMETER);
-return 0;
+LinesCopied = 0;
+goto Exit;
 }
 /*
  if ( !pDc_Attr || // DC is Public
@@ -867,8 +869,10 @@ StretchDIBits(
 
 if (!GdiGetHandleUserData(hdc, GDI_OBJECT_TYPE_DC, (PVOID) & pDc_Attr))
 {
+DPRINT1("StretchDIBits called on invalid DC %p (not owned?)\n", hdc);
 SetLastError(ERROR_INVALID_PARAMETER);
-return 0;
+LinesCopied = 0;
+goto Exit;
 }
 /*
  if ( !pDc_Attr ||
@@ -894,6 +898,7 @@ StretchDIBits(
   cjBmpScanSize,
   NULL );
 }
+Exit:
 if (pvSafeBits)
 RtlFreeHeap(RtlGetProcessHeap(), 0, pvSafeBits);
 if (lpBitsInfo != pConvertedInfo)


[ros-diffs] [reactos] 02/02: [BUTTERFLIES] Do not release the DC passed to OpenGL. CORE-18498

2023-01-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=afb953ae4dd1ca89c66ddd602f22146803b0709d

commit afb953ae4dd1ca89c66ddd602f22146803b0709d
Author: Thomas Faber 
AuthorDate: Mon Jan 16 19:45:03 2023 -0500
Commit: Thomas Faber 
CommitDate: Fri Jan 27 22:31:37 2023 -0500

[BUTTERFLIES] Do not release the DC passed to OpenGL. CORE-18498
---
 modules/rosapps/applications/screensavers/butterflies/butterflies.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git 
a/modules/rosapps/applications/screensavers/butterflies/butterflies.c 
b/modules/rosapps/applications/screensavers/butterflies/butterflies.c
index 4c675a757a8..6d33fd35e66 100644
--- a/modules/rosapps/applications/screensavers/butterflies/butterflies.c
+++ b/modules/rosapps/applications/screensavers/butterflies/butterflies.c
@@ -12,6 +12,7 @@
 HINSTANCE  hInstance;  // Holds The Instance 
Of The Application
 
 GLuint texture[3]; //stores texture objects and display 
list
+HDC hdcOpenGL;
 
 LPCTSTR registryPath = _T("Software\\Microsoft\\ScreenSavers\\Butterflies");
 BOOL dRotate;
@@ -136,7 +137,7 @@ HGLRC InitOGLWindow(HWND hWnd)
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
 
-   ReleaseDC(hWnd, hDC);
+   hdcOpenGL = hDC;
 
return hRC;
 }
@@ -287,6 +288,7 @@ LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT message,
case WM_DESTROY:
wglMakeCurrent(NULL, NULL);
wglDeleteContext(hRC);
+   ReleaseDC(hWnd, hdcOpenGL);
break;
}
 


[ros-diffs] [reactos] 01/01: [NTOS:PNP] Avoid recursion when walking the device tree.

2023-01-22 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c0e7eaf4036fd23cf4fb79d15d82150e3fd0e689

commit c0e7eaf4036fd23cf4fb79d15d82150e3fd0e689
Author: Thomas Faber 
AuthorDate: Sat Jan 14 17:40:14 2023 -0500
Commit: Thomas Faber 
CommitDate: Sun Jan 22 09:42:08 2023 -0500

[NTOS:PNP] Avoid recursion when walking the device tree.
---
 ntoskrnl/io/pnpmgr/plugplay.c | 55 +--
 1 file changed, 32 insertions(+), 23 deletions(-)

diff --git a/ntoskrnl/io/pnpmgr/plugplay.c b/ntoskrnl/io/pnpmgr/plugplay.c
index 192612c66a2..46585458b84 100644
--- a/ntoskrnl/io/pnpmgr/plugplay.c
+++ b/ntoskrnl/io/pnpmgr/plugplay.c
@@ -18,6 +18,12 @@ typedef struct _PNP_EVENT_ENTRY
 PLUGPLAY_EVENT_BLOCK Event;
 } PNP_EVENT_ENTRY, *PPNP_EVENT_ENTRY;
 
+typedef struct _IOP_FIND_DEVICE_INSTANCE_TRAVERSE_CONTEXT
+{
+PCUNICODE_STRING InstancePath;
+PDEVICE_OBJECT DeviceObject;
+} IOP_FIND_DEVICE_INSTANCE_TRAVERSE_CONTEXT, 
*PIOP_FIND_DEVICE_INSTANCE_TRAVERSE_CONTEXT;
+
 
 /* GLOBALS ***/
 
@@ -88,39 +94,32 @@ IopQueueTargetDeviceEvent(const GUID *Guid,
 return STATUS_SUCCESS;
 }
 
-
-static PDEVICE_OBJECT
-IopTraverseDeviceNode(PDEVICE_NODE Node, PUNICODE_STRING DeviceInstance)
+NTSTATUS
+IopFindDeviceInstanceTraverse(
+_In_ PDEVICE_NODE DeviceNode,
+_Inout_ PVOID Context)
 {
-PDEVICE_OBJECT DeviceObject;
-PDEVICE_NODE ChildNode;
+PIOP_FIND_DEVICE_INSTANCE_TRAVERSE_CONTEXT DeviceInstanceContext = Context;
 
-if (RtlEqualUnicodeString(&Node->InstancePath,
-  DeviceInstance, TRUE))
+if (RtlEqualUnicodeString(&DeviceNode->InstancePath,
+  DeviceInstanceContext->InstancePath, TRUE))
 {
-ObReferenceObject(Node->PhysicalDeviceObject);
-return Node->PhysicalDeviceObject;
-}
+ObReferenceObject(DeviceNode->PhysicalDeviceObject);
+DeviceInstanceContext->DeviceObject = DeviceNode->PhysicalDeviceObject;
 
-/* Traversal of all children nodes */
-for (ChildNode = Node->Child;
- ChildNode != NULL;
- ChildNode = ChildNode->Sibling)
-{
-DeviceObject = IopTraverseDeviceNode(ChildNode, DeviceInstance);
-if (DeviceObject != NULL)
-{
-return DeviceObject;
-}
+/* Stop enumeration */
+return STATUS_UNSUCCESSFUL;
 }
 
-return NULL;
+return STATUS_SUCCESS;
 }
 
-
 PDEVICE_OBJECT
 IopGetDeviceObjectFromDeviceInstance(PUNICODE_STRING DeviceInstance)
 {
+DEVICETREE_TRAVERSE_CONTEXT Context;
+IOP_FIND_DEVICE_INSTANCE_TRAVERSE_CONTEXT DeviceInstanceContext;
+
 if (IopRootDeviceNode == NULL)
 return NULL;
 
@@ -136,7 +135,17 @@ IopGetDeviceObjectFromDeviceInstance(PUNICODE_STRING 
DeviceInstance)
 return NULL;
 }
 
-return IopTraverseDeviceNode(IopRootDeviceNode, DeviceInstance);
+/* Traverse the device tree to find the matching device node */
+DeviceInstanceContext.InstancePath = DeviceInstance;
+DeviceInstanceContext.DeviceObject = NULL;
+IopInitDeviceTreeTraverseContext(&Context,
+ IopRootDeviceNode,
+ IopFindDeviceInstanceTraverse,
+ &DeviceInstanceContext);
+(void)IopTraverseDeviceTree(&Context);
+
+/* In case of error or instance not found, this will still be NULL from 
above. */
+return DeviceInstanceContext.DeviceObject;
 }
 
 static NTSTATUS


[ros-diffs] [reactos] 01/01: [COMPBATT] Add inf entry. CORE-18167

2023-01-20 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d3a718eb01b47b8a6f3cdc2460c8ebb9dcf7c723

commit d3a718eb01b47b8a6f3cdc2460c8ebb9dcf7c723
Author: Thomas Faber 
AuthorDate: Fri Jan 20 23:58:18 2023 -0500
Commit: Thomas Faber 
CommitDate: Sat Jan 21 00:10:06 2023 -0500

[COMPBATT] Add inf entry. CORE-18167
---
 drivers/bus/acpi/acpi.inf | 20 
 1 file changed, 20 insertions(+)

diff --git a/drivers/bus/acpi/acpi.inf b/drivers/bus/acpi/acpi.inf
index b1b94764d30..7fcafbfa630 100644
--- a/drivers/bus/acpi/acpi.inf
+++ b/drivers/bus/acpi/acpi.inf
@@ -19,6 +19,7 @@ DefaultDestDir = 12
 
 [GenericMfg]
 %*PNP0C08.DeviceDesc% = ACPI_Inst,*PNP0C08
+%COMPOSITE_BATTERY.DeviceDesc% = CompBatt_Inst,COMPOSITE_BATTERY
 
 ;-- ACPI DRIVER -
 
@@ -38,6 +39,24 @@ ErrorControl  = 1
 ServiceBinary = %12%\acpi.sys
 LoadOrderGroup = Boot Bus Extender
 
+; COMPBATT DRIVER ---
+
+[CompBatt_Inst.NT]
+CopyFiles = CompBatt_CopyFiles.NT
+
+[CompBatt_CopyFiles.NT]
+compbatt.sys
+
+[CompBatt_Inst.NT.Services]
+AddService = compbatt, 0x0002, compbatt_Service_Inst
+
+[compbatt_Service_Inst]
+ServiceType   = 1
+StartType = 0
+ErrorControl  = 1
+ServiceBinary = %12%\compbatt.sys
+LoadOrderGroup = System Bus Extender
+
 ; STRINGS ---
 
 [Strings]
@@ -47,6 +66,7 @@ ReactOS = "ReactOS Project"
 ; Localizable
 GenericMfg = "(Generic system devices)"
 *PNP0C08.DeviceDesc = "ACPI hardware"
+COMPOSITE_BATTERY.DeviceDesc = "Composite battery"
 
 [Strings.0405]
 GenericMfg = "(Generická systémová zařízení)"


[ros-diffs] [reactos] 01/01: [NTOS:IO] Handle missing device instance in IopInitializeBuiltinDriver. CORE-18793

2023-01-14 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=543d3902599e98401dae73ca690f89b93b6d8d7d

commit 543d3902599e98401dae73ca690f89b93b6d8d7d
Author: Thomas Faber 
AuthorDate: Sat Jan 14 16:36:57 2023 -0500
Commit: Thomas Faber 
CommitDate: Sat Jan 14 17:52:17 2023 -0500

[NTOS:IO] Handle missing device instance in IopInitializeBuiltinDriver. 
CORE-18793
---
 ntoskrnl/io/iomgr/driver.c | 13 ++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/ntoskrnl/io/iomgr/driver.c b/ntoskrnl/io/iomgr/driver.c
index 61ac27ed25b..498b09ea40f 100644
--- a/ntoskrnl/io/iomgr/driver.c
+++ b/ntoskrnl/io/iomgr/driver.c
@@ -967,9 +967,16 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY 
BootLdrEntry)
 instancePath.Buffer[instancePath.Length / sizeof(WCHAR)] = 
UNICODE_NULL;
 
 PDEVICE_OBJECT pdo = 
IopGetDeviceObjectFromDeviceInstance(&instancePath);
-PiQueueDeviceAction(pdo, PiActionAddBootDevices, NULL, NULL);
-ObDereferenceObject(pdo);
-deviceAdded = TRUE;
+if (pdo != NULL)
+{
+PiQueueDeviceAction(pdo, PiActionAddBootDevices, NULL, 
NULL);
+ObDereferenceObject(pdo);
+deviceAdded = TRUE;
+}
+else
+{
+DPRINT1("No device node found matching instance path 
'%wZ'\n", &instancePath);
+}
 }
 
 ExFreePool(kvInfo);


[ros-diffs] [reactos] 01/01: [HIVESYS] Move ndis to the "NDIS Wrapper" group. CORE-18790

2023-01-14 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6c06760547d093268d9d9d778b1d91f24b63269e

commit 6c06760547d093268d9d9d778b1d91f24b63269e
Author: Thomas Faber 
AuthorDate: Sat Jan 14 15:24:51 2023 -0500
Commit: Thomas Faber 
CommitDate: Sat Jan 14 15:33:30 2023 -0500

[HIVESYS] Move ndis to the "NDIS Wrapper" group. CORE-18790

Miniport drivers import from NDIS, but NDIS does not support being
loaded as a dependent driver (it does not have DllInitialize).
Instead, NDIS needs to load before all possible miniport drivers,
even boot-start ones. We achieve this by placing it in its own service
order group, which loads before the NDIS group.

All our miniport drivers are demand-start, so would automatically start
later. The ndisprot driver from the ticket is likely the first boot-start
miniport we've encountered. Since DriverEntry did not run,
AdapterListHead was NULL, resulting in the crash.
---
 boot/bootdata/hivesys.inf | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/boot/bootdata/hivesys.inf b/boot/bootdata/hivesys.inf
index 45c3d6e6446..b22c8a7abba 100644
--- a/boot/bootdata/hivesys.inf
+++ b/boot/bootdata/hivesys.inf
@@ -1694,9 +1694,9 @@ 
HKLM,"SYSTEM\CurrentControlSet\Services\Mup","ImagePath",0x0002,"system32\dr
 HKLM,"SYSTEM\CurrentControlSet\Services\Mup","Start",0x00010001,0x
 HKLM,"SYSTEM\CurrentControlSet\Services\Mup","Type",0x00010001,0x0002
 
-; NDIS driver - the only boot-start network driver
+; NDIS driver - needs to load before any drivers in the NDIS group
 
HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ErrorControl",0x00010001,0x0001
-HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Group",0x,"NDIS"
+HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Group",0x,"NDIS Wrapper"
 
HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ImagePath",0x0002,"system32\drivers\ndis.sys"
 HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Start",0x00010001,0x
 HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Type",0x00010001,0x0001


[ros-diffs] [reactos] 02/02: [LIBPNG] Update to version 1.6.39. CORE-18670

2022-11-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=991e2bd45b88b5770e810410d5e4f3e2ac7fea00

commit 991e2bd45b88b5770e810410d5e4f3e2ac7fea00
Author: Thomas Faber 
AuthorDate: Fri Nov 25 09:57:36 2022 -0500
Commit: Thomas Faber 
CommitDate: Sun Nov 27 10:10:53 2022 -0500

[LIBPNG] Update to version 1.6.39. CORE-18670
---
 dll/3rdparty/libpng/docs/ANNOUNCE|  30 +++---
 dll/3rdparty/libpng/docs/CHANGES |  22 -
 dll/3rdparty/libpng/docs/INSTALL |  10 +-
 dll/3rdparty/libpng/docs/README  | 137 ++-
 dll/3rdparty/libpng/docs/libpng-manual.txt   |   4 +-
 dll/3rdparty/libpng/png.c|   6 +-
 dll/3rdparty/libpng/pngpriv.h|   2 +-
 dll/3rdparty/libpng/pngread.c|   4 +-
 dll/3rdparty/libpng/pngrutil.c   |   2 +-
 dll/3rdparty/libpng/pngwrite.c   |   8 +-
 dll/3rdparty/libpng/pngwutil.c   |   6 +-
 media/doc/3rd Party Files.txt|   2 +-
 sdk/include/reactos/libs/libpng/png.h|  16 ++--
 sdk/include/reactos/libs/libpng/pngconf.h|   2 +-
 sdk/include/reactos/libs/libpng/pnglibconf.h |   2 +-
 15 files changed, 136 insertions(+), 117 deletions(-)

diff --git a/dll/3rdparty/libpng/docs/ANNOUNCE 
b/dll/3rdparty/libpng/docs/ANNOUNCE
index 9c9bb189183..5675b973ab2 100644
--- a/dll/3rdparty/libpng/docs/ANNOUNCE
+++ b/dll/3rdparty/libpng/docs/ANNOUNCE
@@ -1,5 +1,5 @@
-libpng 1.6.38 - September 14, 2022
-==
+libpng 1.6.39 - November 20, 2022
+=
 
 This is a public release of libpng, intended for use in production code.
 
@@ -9,13 +9,13 @@ Files available for download
 
 Source files with LF line endings (for Unix/Linux):
 
- * libpng-1.6.38.tar.xz (LZMA-compressed, recommended)
- * libpng-1.6.38.tar.gz
+ * libpng-1.6.39.tar.xz (LZMA-compressed, recommended)
+ * libpng-1.6.39.tar.gz
 
 Source files with CRLF line endings (for Windows):
 
- * lp1638.7z (LZMA-compressed, recommended)
- * lp1638.zip
+ * lpng1639.7z (LZMA-compressed, recommended)
+ * lpng1639.zip
 
 Other information:
 
@@ -25,13 +25,19 @@ Other information:
  * TRADEMARK.md
 
 
-Changes since the previous public release (version 1.6.37)
---
+Changes from version 1.6.38 to version 1.6.39
+-
 
- * Added configurations and scripts for continuous integration.
- * Fixed various errors in the handling of tRNS, hIST and eXIf.
- * Implemented many stability improvements across all platforms.
- * Updated the internal documentation.
+ * Changed the error handler of oversized chunks (i.e. larger than
+   PNG_USER_CHUNK_MALLOC_MAX) from png_chunk_error to png_benign_error.
+ * Fixed a buffer overflow error in contrib/tools/pngfix.
+ * Fixed a memory leak (CVE-2019-6129) in contrib/tools/pngcp.
+ * Disabled the ARM Neon optimizations by default in the CMake file,
+   following the default behavior of the configure script.
+ * Allowed configure.ac to work with the trunk version of autoconf.
+ * Removed the support for "install" targets from the legacy makefiles;
+   removed the obsolete makefile.cegcc.
+ * Cleaned up the code and updated the internal documentation.
 
 
 Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
diff --git a/dll/3rdparty/libpng/docs/CHANGES b/dll/3rdparty/libpng/docs/CHANGES
index 9a86869681b..366e0f6a7be 100644
--- a/dll/3rdparty/libpng/docs/CHANGES
+++ b/dll/3rdparty/libpng/docs/CHANGES
@@ -4052,7 +4052,7 @@ Version 1.6.0beta16 [March 6, 2012]
 (in fact this is harmless, but the PNG data produced may be sub-optimal).
 
 Version 1.6.0beta17 [March 10, 2012]
-  Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition. 
+  Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition.
   Reject all iCCP chunks after the first, even if the first one is invalid.
   Deflate/inflate was reworked to move common zlib calls into single
 functions [rw]util.c.  A new shared keyword check routine was also added
@@ -4962,7 +4962,7 @@ Version 1.6.13beta01 [July 4, 2014]
   Changed "if defined(__ARM_NEON__)" to
 "if (defined(__ARM_NEON__) || defined(__ARM_NEON))" (James Wu).
   Fixed clang no-warning builds: png_digit was defined but never used.
-
+
 Version 1.6.13beta02 [July 21, 2014]
   Fixed an incorrect separator ("/" should be "\") in scripts/makefile.vcwin32
 (bug report from Wolfgang S. Kechel).  Bug was introduced in libpng-1.6.11.
@@ -5453,7 +5453,7 @@ Version 1.6.21beta01 [December 11, 2015]
 Version 1.6.21beta02 [December 14, 2015]
   Moved png_check_keyword() from pngwutil.c to pngset.c
   Removed LE/BE dependencies in pngvalid, to 'fix' the current problem
-in the BigEndian tests by not testing it, making the BE code the same 
+in the BigEndian tests by not testing it, making the BE code the same
 as th

[ros-diffs] [reactos] 01/02: [LIBPNG] Update to version 1.6.38. CORE-18670

2022-11-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c5febe93f0f67fe760be6c7b07c7f3a5fc282394

commit c5febe93f0f67fe760be6c7b07c7f3a5fc282394
Author: Thomas Faber 
AuthorDate: Fri Nov 25 09:57:24 2022 -0500
Commit: Thomas Faber 
CommitDate: Sun Nov 27 10:10:51 2022 -0500

[LIBPNG] Update to version 1.6.38. CORE-18670
---
 dll/3rdparty/libpng/docs/ANNOUNCE| 29 ---
 dll/3rdparty/libpng/docs/CHANGES | 10 +++-
 dll/3rdparty/libpng/docs/INSTALL | 75 ++--
 dll/3rdparty/libpng/docs/LICENSE |  4 +-
 dll/3rdparty/libpng/docs/README  |  8 +--
 dll/3rdparty/libpng/docs/example.c   |  1 +
 dll/3rdparty/libpng/docs/libpng-manual.txt   |  8 +--
 dll/3rdparty/libpng/png.c| 14 +++---
 dll/3rdparty/libpng/pngget.c | 14 +++---
 dll/3rdparty/libpng/pngpriv.h| 65 +++-
 dll/3rdparty/libpng/pngread.c|  3 --
 dll/3rdparty/libpng/pngrtran.c   |  2 +-
 dll/3rdparty/libpng/pngrutil.c   | 36 ++---
 dll/3rdparty/libpng/pngset.c | 13 +++--
 dll/3rdparty/libpng/pngstruct.h  | 12 +
 dll/3rdparty/libpng/pngwrite.c   | 12 -
 media/doc/3rd Party Files.txt|  2 +-
 sdk/include/reactos/libs/libpng/png.h| 26 +-
 sdk/include/reactos/libs/libpng/pngconf.h|  8 +--
 sdk/include/reactos/libs/libpng/pnglibconf.h |  4 +-
 20 files changed, 168 insertions(+), 178 deletions(-)

diff --git a/dll/3rdparty/libpng/docs/ANNOUNCE 
b/dll/3rdparty/libpng/docs/ANNOUNCE
index ecf9c7043b0..9c9bb189183 100644
--- a/dll/3rdparty/libpng/docs/ANNOUNCE
+++ b/dll/3rdparty/libpng/docs/ANNOUNCE
@@ -1,5 +1,5 @@
-libpng 1.6.37 - April 14, 2019
-==
+libpng 1.6.38 - September 14, 2022
+==
 
 This is a public release of libpng, intended for use in production code.
 
@@ -9,13 +9,13 @@ Files available for download
 
 Source files with LF line endings (for Unix/Linux):
 
- * libpng-1.6.37.tar.xz (LZMA-compressed, recommended)
- * libpng-1.6.37.tar.gz
+ * libpng-1.6.38.tar.xz (LZMA-compressed, recommended)
+ * libpng-1.6.38.tar.gz
 
 Source files with CRLF line endings (for Windows):
 
- * lp1637.7z (LZMA-compressed, recommended)
- * lp1637.zip
+ * lp1638.7z (LZMA-compressed, recommended)
+ * lp1638.zip
 
 Other information:
 
@@ -25,20 +25,13 @@ Other information:
  * TRADEMARK.md
 
 
-Changes since the previous public release (version 1.6.36)
+Changes since the previous public release (version 1.6.37)
 --
 
- * Fixed a use-after-free vulnerability (CVE-2019-7317) in png_image_free.
- * Fixed a memory leak in the ARM NEON implementation of png_do_expand_palette.
- * Fixed a memory leak in pngtest.c.
- * Fixed two vulnerabilities (CVE-2018-14048, CVE-2018-14550) in
-   contrib/pngminus; refactor.
- * Changed the license of contrib/pngminus to MIT; refresh makefile and docs.
-   (Contributed by Willem van Schaik)
- * Fixed a typo in the libpng license v2.
-   (Contributed by Miguel Ojeda)
- * Added makefiles for AddressSanitizer-enabled builds.
- * Cleaned up various makefiles.
+ * Added configurations and scripts for continuous integration.
+ * Fixed various errors in the handling of tRNS, hIST and eXIf.
+ * Implemented many stability improvements across all platforms.
+ * Updated the internal documentation.
 
 
 Send comments/corrections/commendations to png-mng-implement at lists.sf.net.
diff --git a/dll/3rdparty/libpng/docs/CHANGES b/dll/3rdparty/libpng/docs/CHANGES
index f0b0a9342c3..9a86869681b 100644
--- a/dll/3rdparty/libpng/docs/CHANGES
+++ b/dll/3rdparty/libpng/docs/CHANGES
@@ -2295,7 +2295,7 @@ Version 1.4.0beta58 [May 14, 2009]
   Clarified usage of sig_bit versus sig_bit_p in example.c (Vincent Torri)
 
 Version 1.4.0beta59 [May 15, 2009]
-  Reformated sources in libpng style (3-space intentation, comment format)
+  Reformated sources in libpng style (3-space indentation, comment format)
   Fixed typo in libpng docs (PNG_FILTER_AVE should be PNG_FILTER_AVG)
   Added sections about the git repository and our coding style to the
 documentation
@@ -3886,7 +3886,7 @@ Version 1.6.0beta06 [January 24, 2012]
 Version 1.6.0beta07 [January 28, 2012]
   Eliminated Intel icc/icl compiler warnings. The Intel (GCC derived)
 compiler issues slightly different warnings from those issued by the
-current vesions of GCC. This eliminates those warnings by
+current versions of GCC. This eliminates those warnings by
 adding/removing casts and small code rewrites.
   Updated configure.ac from autoupdate: added --enable-werror option.
 Also some layout regularization and removal of introduced tab characters
@@ -6103,6 +6103,12 @@ Version 1.6.37 [April 14, 2019]
   Added makefiles for AddressSanitizer-enabled builds.
   Cleaned up various

[ros-diffs] [reactos] 04/04: [LIBXML2] Update to version 2.10.3. CORE-17766

2022-11-25 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c0027d117cefc8a6f7c50ad7d175c3b4bb1cd8b1

commit c0027d117cefc8a6f7c50ad7d175c3b4bb1cd8b1
Author: Thomas Faber 
AuthorDate: Sun Nov 20 10:45:09 2022 -0500
Commit: Thomas Faber 
CommitDate: Fri Nov 25 09:30:40 2022 -0500

[LIBXML2] Update to version 2.10.3. CORE-17766
---
 media/doc/3rd Party Files.txt  |   2 +-
 sdk/lib/3rdparty/libxml2/NEWS  |  17 ++
 sdk/lib/3rdparty/libxml2/SAX2.c|  24 ++-
 sdk/lib/3rdparty/libxml2/config.h  |   2 +-
 sdk/lib/3rdparty/libxml2/entities.c|  55 ++
 sdk/lib/3rdparty/libxml2/include/win32config.h |   8 +-
 sdk/lib/3rdparty/libxml2/parser.c  | 233 +
 7 files changed, 172 insertions(+), 169 deletions(-)

diff --git a/media/doc/3rd Party Files.txt b/media/doc/3rd Party Files.txt
index c9d57484dcf..e27e5758f1c 100644
--- a/media/doc/3rd Party Files.txt 
+++ b/media/doc/3rd Party Files.txt 
@@ -239,7 +239,7 @@ URL: https://github.com/win-iconv/win-iconv
 
 Title: LibXML
 Path: sdk/lib/3rdparty/libxml2
-Used Version: 2.10.2
+Used Version: 2.10.3
 License: MIT (https://spdx.org/licenses/MIT.htmlf)
 URL: http://xmlsoft.org, ftp://xmlsoft.org/libxml2/
 
diff --git a/sdk/lib/3rdparty/libxml2/NEWS b/sdk/lib/3rdparty/libxml2/NEWS
index 7e35a4d8a56..72e130b94d4 100644
--- a/sdk/lib/3rdparty/libxml2/NEWS
+++ b/sdk/lib/3rdparty/libxml2/NEWS
@@ -1,5 +1,22 @@
 NEWS file for libxml2
 
+v2.10.3: Oct 14 2022
+
+### Security
+
+- [CVE-2022-40304] Fix dict corruption caused by entity reference cycles
+- [CVE-2022-40303] Fix integer overflows with XML_PARSE_HUGE
+- Fix overflow check in SAX2.c
+
+### Portability
+
+- win32: Fix build with VS2013
+
+### Build system
+
+- cmake: Set SOVERSION
+
+
 v2.10.2: Aug 29 2022
 
 ### Improvements
diff --git a/sdk/lib/3rdparty/libxml2/SAX2.c b/sdk/lib/3rdparty/libxml2/SAX2.c
index ec89046b1d6..9faf5b461dd 100644
--- a/sdk/lib/3rdparty/libxml2/SAX2.c
+++ b/sdk/lib/3rdparty/libxml2/SAX2.c
@@ -28,11 +28,6 @@
 #include 
 #include 
 
-/* Define SIZE_T_MAX unless defined through . */
-#ifndef SIZE_T_MAX
-# define SIZE_T_MAX ((size_t)-1)
-#endif /* !SIZE_T_MAX */
-
 /* #define DEBUG_SAX2 */
 /* #define DEBUG_SAX2_TREE */
 
@@ -2596,22 +2591,23 @@ xmlSAX2Text(xmlParserCtxtPtr ctxt, const xmlChar *ch, 
int len,
xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: xmlStrdup returned 
NULL");
return;
}
-if (((size_t)ctxt->nodelen + (size_t)len > XML_MAX_TEXT_LENGTH) &&
+   if (ctxt->nodelen > INT_MAX - len) {
+xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented");
+return;
+   }
+if ((ctxt->nodelen + len > XML_MAX_TEXT_LENGTH) &&
 ((ctxt->options & XML_PARSE_HUGE) == 0)) {
 xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: huge text node");
 return;
 }
-   if ((size_t)ctxt->nodelen > SIZE_T_MAX - (size_t)len ||
-   (size_t)ctxt->nodemem + (size_t)len > SIZE_T_MAX / 2) {
-xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented");
-return;
-   }
if (ctxt->nodelen + len >= ctxt->nodemem) {
xmlChar *newbuf;
-   size_t size;
+   int size;
 
-   size = ctxt->nodemem + len;
-   size *= 2;
+   size = ctxt->nodemem > INT_MAX - len ?
+   INT_MAX :
+   ctxt->nodemem + len;
+   size = size > INT_MAX / 2 ? INT_MAX : size * 2;
 newbuf = (xmlChar *) xmlRealloc(lastChild->content,size);
if (newbuf == NULL) {
xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters");
diff --git a/sdk/lib/3rdparty/libxml2/config.h 
b/sdk/lib/3rdparty/libxml2/config.h
index ec153ccf56c..4e130b4a824 100644
--- a/sdk/lib/3rdparty/libxml2/config.h
+++ b/sdk/lib/3rdparty/libxml2/config.h
@@ -186,7 +186,7 @@
 /* #undef VA_LIST_IS_ARRAY */
 
 /* Version number of package */
-#define VERSION "2.10.2"
+#define VERSION "2.10.3"
 
 /* Determine what socket length (socklen_t) data type is */
 #define XML_SOCKLEN_T int
diff --git a/sdk/lib/3rdparty/libxml2/entities.c 
b/sdk/lib/3rdparty/libxml2/entities.c
index 84435515f73..d4e5412efed 100644
--- a/sdk/lib/3rdparty/libxml2/entities.c
+++ b/sdk/lib/3rdparty/libxml2/entities.c
@@ -128,36 +128,19 @@ xmlFreeEntity(xmlEntityPtr entity)
 if ((entity->children) && (entity->owner == 1) &&
 (entity == (xmlEntityPtr) entity->children->parent))
 xmlFreeNodeList(entity->children);
-if (dict != NULL) {
-if ((entity->name != NULL) && (!xmlDictOwns(dict, entity->name)

[ros-diffs] [reactos] 03/04: [LIBXSLT] Update to version 1.1.37. CORE-17766

2022-11-25 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=19da1718e515ebd52e53a011217cfea864135bb0

commit 19da1718e515ebd52e53a011217cfea864135bb0
Author: Thomas Faber 
AuthorDate: Sun Nov 20 10:43:32 2022 -0500
Commit: Thomas Faber 
CommitDate: Fri Nov 25 09:30:40 2022 -0500

[LIBXSLT] Update to version 1.1.37. CORE-17766
---
 dll/3rdparty/libxslt/Makefile.am  | 15 +++
 dll/3rdparty/libxslt/NEWS | 14 ++
 dll/3rdparty/libxslt/functions.c  | 12 
 dll/3rdparty/libxslt/keys.c   |  2 +-
 dll/3rdparty/libxslt/numbers.c| 14 ++
 dll/3rdparty/libxslt/pattern.c| 22 +++---
 dll/3rdparty/libxslt/transform.c  |  4 ++--
 media/doc/3rd Party Files.txt |  2 +-
 sdk/include/reactos/libs/libxslt/xsltconfig.h |  6 +++---
 9 files changed, 57 insertions(+), 34 deletions(-)

diff --git a/dll/3rdparty/libxslt/Makefile.am b/dll/3rdparty/libxslt/Makefile.am
index d5d6a4cfe93..a2d766f5653 100644
--- a/dll/3rdparty/libxslt/Makefile.am
+++ b/dll/3rdparty/libxslt/Makefile.am
@@ -12,17 +12,15 @@ confexec_DATA = xsltConf.sh
 
 bin_SCRIPTS = xslt-config
 
-dist-hook: cleanup libxslt.spec
+dist-hook: cleanup
touch $(distdir)/doc/*.xml
touch $(distdir)/doc/EXSLT/*.xml
touch $(distdir)/libxslt/*.syms
(cd $(srcdir) ; tar -cf - win32 vms examples) | (cd $(distdir); tar xf 
-)
 
-EXTRA_DIST = xsltConf.sh.in xslt-config.in libxslt.spec libxslt.spec.in \
- FEATURES TODO Copyright libxslt.m4 \
-win32/libxslt/libxslt.def win32/libxslt/libxslt.dsw \
-win32/libxslt/libxslt_so.dsp win32/libxslt/xsltproc.dsp \
-CMakeLists.txt config.h.cmake.in FindGcrypt.cmake 
libxslt-config.cmake.in libxslt-config.cmake.cmake.in
+EXTRA_DIST = xsltConf.sh.in \
+ FEATURES TODO Copyright \
+CMakeLists.txt config.h.cmake.in libxslt-config.cmake.in 
libxslt-config.cmake.cmake.in
 
 ## We create xsltConf.sh here and not from configure because we want
 ## to get the paths expanded correctly.  Macros like srcdir are given
@@ -73,8 +71,9 @@ pkgconfigdir=$(libdir)/pkgconfig
 pkgconfig_DATA = libxslt.pc libexslt.pc
 
 cmakedir = $(libdir)/cmake/libxslt
-cmake_DATA = FindGcrypt.cmake libxslt-config.cmake
+dist_cmake_DATA = FindGcrypt.cmake
+cmake_DATA = libxslt-config.cmake
 
 m4datadir = $(datadir)/aclocal
-m4data_DATA = libxslt.m4
+dist_m4data_DATA = libxslt.m4
 
diff --git a/dll/3rdparty/libxslt/NEWS b/dll/3rdparty/libxslt/NEWS
index 0f2dcd73710..dc97c2ca621 100644
--- a/dll/3rdparty/libxslt/NEWS
+++ b/dll/3rdparty/libxslt/NEWS
@@ -1,5 +1,19 @@
 NEWS file for libxslt
 
+v1.1.37: Aug 29 2022
+
+### Improvements
+
+- Don't use deprecated libxml2 macros
+- Don't mess with xmlDefaultSAXHandler
+
+### Build system
+
+- Require automake-1.16.3 or later
+- Remove generated files from distribution
+- Add missing compile definition for static builds to Autotools (Mike Dalessio)
+
+
 v1.1.36: Aug 17 2022
 
 ### Removals and deprecations
diff --git a/dll/3rdparty/libxslt/functions.c b/dll/3rdparty/libxslt/functions.c
index a053c1ce65d..5cd1b7c285d 100644
--- a/dll/3rdparty/libxslt/functions.c
+++ b/dll/3rdparty/libxslt/functions.c
@@ -587,7 +587,8 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int 
nargs)
 
 switch (nargs) {
 case 3:
-   CAST_TO_STRING;
+if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))
+xmlXPathStringFunction(ctxt, 1);
decimalObj = valuePop(ctxt);
 ncname = xsltSplitQName(sheet->dict, decimalObj->stringval, &prefix);
 if (prefix != NULL) {
@@ -613,13 +614,16 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, 
int nargs)
}
/* Intentional fall-through */
 case 2:
-   CAST_TO_STRING;
+if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))
+xmlXPathStringFunction(ctxt, 1);
formatObj = valuePop(ctxt);
-   CAST_TO_NUMBER;
+if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))
+xmlXPathNumberFunction(ctxt, 1);
numberObj = valuePop(ctxt);
break;
 default:
-   XP_ERROR(XPATH_INVALID_ARITY);
+   xmlXPathErr(ctxt, XPATH_INVALID_ARITY);
+return;
 }
 
 if (formatValues != NULL) {
diff --git a/dll/3rdparty/libxslt/keys.c b/dll/3rdparty/libxslt/keys.c
index 4215cb38e85..25adeb260f0 100644
--- a/dll/3rdparty/libxslt/keys.c
+++ b/dll/3rdparty/libxslt/keys.c
@@ -292,7 +292,7 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
 current = end = 0;
 while (match[current] != 0) {
start = current;
-   while (IS_BLANK_CH(match[current]))
+   while (xmlIsBlank_ch(match[current]))
current++;
end = current;
while ((match[end] != 0) &

[ros-diffs] [reactos] 02/04: [LIBXML2] Update to version 2.10.2. CORE-17766

2022-11-25 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1dbad942d88f433d54a695364ece75127a411773

commit 1dbad942d88f433d54a695364ece75127a411773
Author: Thomas Faber 
AuthorDate: Sun Nov 20 10:42:25 2022 -0500
Commit: Thomas Faber 
CommitDate: Fri Nov 25 09:30:39 2022 -0500

[LIBXML2] Update to version 2.10.2. CORE-17766
---
 media/doc/3rd Party Files.txt |  2 +-
 sdk/lib/3rdparty/libxml2/NEWS | 17 +
 sdk/lib/3rdparty/libxml2/config.h | 12 +++-
 sdk/lib/3rdparty/libxml2/tree.c   |  3 ++-
 sdk/lib/3rdparty/libxml2/xpath.c  |  3 +--
 5 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/media/doc/3rd Party Files.txt b/media/doc/3rd Party Files.txt
index c7747fee0a7..19ff836c6f7 100644
--- a/media/doc/3rd Party Files.txt 
+++ b/media/doc/3rd Party Files.txt 
@@ -239,7 +239,7 @@ URL: https://github.com/win-iconv/win-iconv
 
 Title: LibXML
 Path: sdk/lib/3rdparty/libxml2
-Used Version: 2.10.1
+Used Version: 2.10.2
 License: MIT (https://spdx.org/licenses/MIT.htmlf)
 URL: http://xmlsoft.org, ftp://xmlsoft.org/libxml2/
 
diff --git a/sdk/lib/3rdparty/libxml2/NEWS b/sdk/lib/3rdparty/libxml2/NEWS
index 5f562a2f21b..7e35a4d8a56 100644
--- a/sdk/lib/3rdparty/libxml2/NEWS
+++ b/sdk/lib/3rdparty/libxml2/NEWS
@@ -1,5 +1,22 @@
 NEWS file for libxml2
 
+v2.10.2: Aug 29 2022
+
+### Improvements
+
+- Remove set-but-unused variable in xmlXPathScanName
+- Silence -Warray-bounds warning
+
+### Build system
+
+- build: require automake-1.16.3 or later (Xi Ruoyao)
+- Remove generated files from distribution
+
+### Test suite
+
+- Don't create missing.xml when running testapi
+
+
 v2.10.1: Aug 25 2022
 
 ### Regressions
diff --git a/sdk/lib/3rdparty/libxml2/config.h 
b/sdk/lib/3rdparty/libxml2/config.h
index a023d17d997..ec153ccf56c 100644
--- a/sdk/lib/3rdparty/libxml2/config.h
+++ b/sdk/lib/3rdparty/libxml2/config.h
@@ -55,9 +55,6 @@
 /* Define to 1 if you have the  header file. */
 /* #undef HAVE_LZMA_H */
 
-/* Define to 1 if you have the  header file. */
-#define HAVE_MEMORY_H 1
-
 /* Define to 1 if you have the `mmap' function. */
 /* #undef HAVE_MMAP */
 
@@ -102,6 +99,9 @@
 /* Define to 1 if you have the  header file. */
 #define HAVE_STDINT_H 1
 
+/* Define to 1 if you have the  header file. */
+#define HAVE_STDIO_H 1
+
 /* Define to 1 if you have the  header file. */
 #define HAVE_STDLIB_H 1
 
@@ -174,7 +174,9 @@
 /* Type cast for the send() function 2nd arg */
 #define SEND_ARG2_CAST
 
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+   required in a freestanding environment). This macro is provided for
+   backward compatibility; new code need not use it. */
 #define STDC_HEADERS 1
 
 /* Support for IPv6 */
@@ -184,7 +186,7 @@
 /* #undef VA_LIST_IS_ARRAY */
 
 /* Version number of package */
-#define VERSION "2.10.1"
+#define VERSION "2.10.2"
 
 /* Determine what socket length (socklen_t) data type is */
 #define XML_SOCKLEN_T int
diff --git a/sdk/lib/3rdparty/libxml2/tree.c b/sdk/lib/3rdparty/libxml2/tree.c
index b53fa37ef41..4c9f00d784e 100644
--- a/sdk/lib/3rdparty/libxml2/tree.c
+++ b/sdk/lib/3rdparty/libxml2/tree.c
@@ -9604,7 +9604,8 @@ xmlDOMWrapCloneNode(xmlDOMWrapCtxtPtr ctxt,
/*
* Attributes (xmlAttr).
*/
-   clone = (xmlNodePtr) xmlMalloc(sizeof(xmlAttr));
+/* Use xmlRealloc to avoid -Warray-bounds warning */
+   clone = (xmlNodePtr) xmlRealloc(NULL, sizeof(xmlAttr));
if (clone == NULL) {
xmlTreeErrMemory("xmlDOMWrapCloneNode(): allocating an 
attr-node");
goto internal_error;
diff --git a/sdk/lib/3rdparty/libxml2/xpath.c b/sdk/lib/3rdparty/libxml2/xpath.c
index 4a6f0e216e7..fbee6a52b12 100644
--- a/sdk/lib/3rdparty/libxml2/xpath.c
+++ b/sdk/lib/3rdparty/libxml2/xpath.c
@@ -10503,7 +10503,7 @@ xmlXPathCompFilterExpr(xmlXPathParserContextPtr ctxt) {
 
 static xmlChar *
 xmlXPathScanName(xmlXPathParserContextPtr ctxt) {
-int len = 0, l;
+int l;
 int c;
 const xmlChar *cur;
 xmlChar *ret;
@@ -10523,7 +10523,6 @@ xmlXPathScanName(xmlXPathParserContextPtr ctxt) {
(c == '_') || (c == ':') ||
(IS_COMBINING(c)) ||
(IS_EXTENDER(c {
-   len += l;
NEXTL(l);
c = CUR_CHAR(l);
 }



[ros-diffs] [reactos] 01/04: [LIBXML2] Update to version 2.10.1. CORE-17766

2022-11-25 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0d5a4166a437b9db8123d0ce3da5c01e877acfdd

commit 0d5a4166a437b9db8123d0ce3da5c01e877acfdd
Author: Thomas Faber 
AuthorDate: Sun Nov 20 10:33:39 2022 -0500
Commit: Thomas Faber 
CommitDate: Fri Nov 25 09:30:36 2022 -0500

[LIBXML2] Update to version 2.10.1. CORE-17766
---
 media/doc/3rd Party Files.txt|  2 +-
 sdk/include/reactos/libs/libxml/xmlversion.h | 10 +-
 sdk/lib/3rdparty/libxml2/HTMLparser.c| 27 ++-
 sdk/lib/3rdparty/libxml2/NEWS| 24 
 sdk/lib/3rdparty/libxml2/config.h|  2 +-
 sdk/lib/3rdparty/libxml2/parser.c| 16 ++--
 6 files changed, 39 insertions(+), 42 deletions(-)

diff --git a/media/doc/3rd Party Files.txt b/media/doc/3rd Party Files.txt
index 8b7b4e319ac..c7747fee0a7 100644
--- a/media/doc/3rd Party Files.txt 
+++ b/media/doc/3rd Party Files.txt 
@@ -239,7 +239,7 @@ URL: https://github.com/win-iconv/win-iconv
 
 Title: LibXML
 Path: sdk/lib/3rdparty/libxml2
-Used Version: 2.10.0
+Used Version: 2.10.1
 License: MIT (https://spdx.org/licenses/MIT.htmlf)
 URL: http://xmlsoft.org, ftp://xmlsoft.org/libxml2/
 
diff --git a/sdk/include/reactos/libs/libxml/xmlversion.h 
b/sdk/include/reactos/libs/libxml/xmlversion.h
index ad9a2cb82b6..1816bfd7956 100644
--- a/sdk/include/reactos/libs/libxml/xmlversion.h
+++ b/sdk/include/reactos/libs/libxml/xmlversion.h
@@ -29,28 +29,28 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  *
  * the version string like "1.2.3"
  */
-#define LIBXML_DOTTED_VERSION "2.10.0"
+#define LIBXML_DOTTED_VERSION "2.10.1"
 
 /**
  * LIBXML_VERSION:
  *
  * the version number: 1.2.3 value is 10203
  */
-#define LIBXML_VERSION 21000
+#define LIBXML_VERSION 21001
 
 /**
  * LIBXML_VERSION_STRING:
  *
  * the version number string, 1.2.3 value is "10203"
  */
-#define LIBXML_VERSION_STRING "21000"
+#define LIBXML_VERSION_STRING "21001"
 
 /**
  * LIBXML_VERSION_EXTRA:
  *
  * extra version information, used to show a git commit description
  */
-#define LIBXML_VERSION_EXTRA "-GITv2.9.13-209-gae383bdb7"
+#define LIBXML_VERSION_EXTRA "-GITv2.10.0-11-g5d96a5ded"
 
 /**
  * LIBXML_TEST_VERSION:
@@ -58,7 +58,7 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  * Macro to check that the libxml version in use is compatible with
  * the version the software has been compiled against
  */
-#define LIBXML_TEST_VERSION xmlCheckVersion(21000);
+#define LIBXML_TEST_VERSION xmlCheckVersion(21001);
 
 #ifndef VMS
 #if 0
diff --git a/sdk/lib/3rdparty/libxml2/HTMLparser.c 
b/sdk/lib/3rdparty/libxml2/HTMLparser.c
index abc4e90575c..ba886908e44 100644
--- a/sdk/lib/3rdparty/libxml2/HTMLparser.c
+++ b/sdk/lib/3rdparty/libxml2/HTMLparser.c
@@ -5056,8 +5056,7 @@ htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
 htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
return(-1);
 }
-else
-memset(sax, 0, sizeof(htmlSAXHandler));
+memset(sax, 0, sizeof(htmlSAXHandler));
 
 /* Allocate the Input stack */
 ctxt->inputTab = (htmlParserInputPtr *)
@@ -5116,11 +5115,9 @@ htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
 ctxt->nodeInfoNr  = 0;
 ctxt->nodeInfoMax = 0;
 
-if (sax == NULL) ctxt->sax = (xmlSAXHandlerPtr) &htmlDefaultSAXHandler;
-else {
-ctxt->sax = sax;
-   memcpy(sax, &htmlDefaultSAXHandler, sizeof(xmlSAXHandlerV1));
-}
+ctxt->sax = sax;
+xmlSAX2InitHtmlDefaultSAXHandler(sax);
+
 ctxt->userData = ctxt;
 ctxt->myDoc = NULL;
 ctxt->wellFormed = 1;
@@ -7116,22 +7113,10 @@ htmlDocPtr
 htmlCtxtReadDoc(htmlParserCtxtPtr ctxt, const xmlChar * cur,
const char *URL, const char *encoding, int options)
 {
-xmlParserInputPtr stream;
-
 if (cur == NULL)
 return (NULL);
-if (ctxt == NULL)
-return (NULL);
-xmlInitParser();
-
-htmlCtxtReset(ctxt);
-
-stream = xmlNewStringInputStream(ctxt, cur);
-if (stream == NULL) {
-return (NULL);
-}
-inputPush(ctxt, stream);
-return (htmlDoRead(ctxt, URL, encoding, options, 1));
+return (htmlCtxtReadMemory(ctxt, (const char *) cur, xmlStrlen(cur), URL,
+   encoding, options));
 }
 
 /**
diff --git a/sdk/lib/3rdparty/libxml2/NEWS b/sdk/lib/3rdparty/libxml2/NEWS
index 0a3dd6b03bf..5f562a2f21b 100644
--- a/sdk/lib/3rdparty/libxml2/NEWS
+++ b/sdk/lib/3rdparty/libxml2/NEWS
@@ -1,5 +1,29 @@
 NEWS file for libxml2
 
+v2.10.1: Aug 25 2022
+
+### Regressions
+
+- Fix xmlCtxtReadDoc with encoding
+
+### Bug fixes
+
+- Fix HTML parser with threads and --without-legacy
+
+### Build system
+
+- Fix build with Python 3.10
+- cmake: Disable version script on macOS
+- Remove Makefile rule to build testapi.c
+
+### Documentation
+
+- Switch back to HTML output

[ros-diffs] [reactos] 02/03: [MSXML3][MSXML3_WINETEST] Partial sync to Wine to enable libxml2 update. CORE-17766

2022-11-23 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=608bbe1136df255e67a493ab794c9a2903d6df62

commit 608bbe1136df255e67a493ab794c9a2903d6df62
Author: Thomas Faber 
AuthorDate: Sun Nov 20 10:03:50 2022 -0500
Commit: Thomas Faber 
CommitDate: Wed Nov 23 22:02:47 2022 -0500

[MSXML3][MSXML3_WINETEST] Partial sync to Wine to enable libxml2 update. 
CORE-17766

xml2: Import upstream release 2.10.0.

wine commit id 015491ab32742ace5218d37b1149c58803858214 by Alexandre 
Julliard 

Note: Upstream msxml3_test has switched away from WINE_NO_LONG_TYPES, so
I've kept the old printf format specifiers for now. Once we do a full
sync, we can get rid of __ROS_LONG64__ for this test and use them
unmodified.
---
 dll/win32/msxml3/main.c|  2 --
 modules/rostests/winetests/msxml3/schema.c | 45 +++---
 2 files changed, 22 insertions(+), 25 deletions(-)

diff --git a/dll/win32/msxml3/main.c b/dll/win32/msxml3/main.c
index fb94bb2de06..9c66c7282c6 100644
--- a/dll/win32/msxml3/main.c
+++ b/dll/win32/msxml3/main.c
@@ -380,8 +380,6 @@ static void init_char_encoders(void)
 };
 int i;
 
-xmlInitCharEncodingHandlers();
-
 for (i = 0; i < ARRAY_SIZE(encoder); i++)
 {
 if (!xmlFindCharEncodingHandler(encoder[i].encoding))
diff --git a/modules/rostests/winetests/msxml3/schema.c 
b/modules/rostests/winetests/msxml3/schema.c
index c7796e768d8..bf2922f09c3 100644
--- a/modules/rostests/winetests/msxml3/schema.c
+++ b/modules/rostests/winetests/msxml3/schema.c
@@ -1132,27 +1132,28 @@ static void test_regex(void)
 struct regex_test {
 const WCHAR *regex;
 const WCHAR *input;
-BOOL todo;
 };
 
 struct regex_test tests[] = {
-{ L"\\!", L"!", TRUE },
-{ L"\\\"", L"\"", TRUE },
-{ L"\\#", L"#", TRUE },
-{ L"\\$", L"$", TRUE },
-{ L"\\%", L"%", TRUE },
-{ L"\\,", L",", TRUE },
-{ L"\\/", L"/", TRUE },
-{ L"\\:", L":", TRUE },
-{ L"\\;", L";", TRUE },
-{ L"\\=", L"=", TRUE },
-{ L"\\>", L">", TRUE },
-{ L"\\@", L"@", TRUE },
-{ L"\\`", L"`", TRUE },
-{ L"\\~", L"~", TRUE },
-{ L"\\uCAFE", L"\xCAFE", TRUE },
+{ L"\\!", L"!" },
+{ L"\\\"", L"\"" },
+{ L"\\#", L"#" },
+{ L"\\$", L"$" },
+{ L"\\%", L"%" },
+{ L"\\,", L"," },
+{ L"\\/", L"/" },
+{ L"\\:", L":" },
+{ L"\\;", L";" },
+{ L"\\=", L"=" },
+{ L"\\>", L">" },
+{ L"\\@", L"@" },
+{ L"\\`", L"`" },
+{ L"\\~", L"~" },
+{ L"\\uCAFE", L"\xCAFE" },
 /* non-BMP character in surrogate pairs: */
-{ L"\\uD83D\\uDE00", L"\xD83D\xDE00", TRUE }
+{ L"\\uD83D\\uDE00", L"\xD83D\xDE00" },
+/* "x{,2}" is non-standard and only works on libxml2 <= v2.9.10 */
+{ L"x{0,2}", L"x" }
 };
 
 int i;
@@ -1173,15 +1174,13 @@ static void test_regex(void)
 if (doc60 && schema60 && cache60)
 {
 HRESULT hr = validate_regex_document(doc60, schema60, cache60, 
tests[i].regex, tests[i].input);
-todo_wine_if(tests[i].todo)
-ok(hr == S_OK, "got 0x%08x for version 60 regex %s input %s\n",
-hr, wine_dbgstr_w(tests[i].regex), 
wine_dbgstr_w(tests[i].input));
+ok(hr == S_OK, "got 0x%08x for for version 60 regex %s input %s\n",
+   hr, wine_dbgstr_w(tests[i].regex), 
wine_dbgstr_w(tests[i].input));
 if (doc40 && schema40 && cache40)
 {
 hr = validate_regex_document(doc40, schema40, cache40, 
tests[i].regex, tests[i].input);
-todo_wine_if(tests[i].todo)
-ok(hr == S_OK, "got 0x%08x for version 40 regex %s input 
%s\n",
-hr, wine_dbgstr_w(tests[i].regex), 
wine_dbgstr_w(tests[i].input));
+ok(hr == S_OK, "got 0x%08x version 40 regex %s input %s\n",
+   hr, wine_dbgstr_w(tests[i].regex), 
wine_dbgstr_w(tests[i].input));
 }
 }
 else



[ros-diffs] [reactos] 05/05: [LIBXML2] Update to version 2.9.14. CORE-17766

2022-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8940614a78009668dcf86d3641aea6485b147432

commit 8940614a78009668dcf86d3641aea6485b147432
Author: Thomas Faber 
AuthorDate: Sat Nov 19 15:10:55 2022 -0500
Commit: Thomas Faber 
CommitDate: Mon Nov 21 19:46:12 2022 -0500

[LIBXML2] Update to version 2.9.14. CORE-17766
---
 media/doc/3rd Party Files.txt|  2 +-
 sdk/include/reactos/libs/libxml/xmlversion.h | 10 ++--
 sdk/lib/3rdparty/libxml2/HTMLparser.c| 47 ---
 sdk/lib/3rdparty/libxml2/NEWS| 36 ++--
 sdk/lib/3rdparty/libxml2/buf.c   | 86 +++-
 sdk/lib/3rdparty/libxml2/config.h|  2 +-
 sdk/lib/3rdparty/libxml2/encoding.c  |  4 ++
 sdk/lib/3rdparty/libxml2/globals.c   | 30 +-
 sdk/lib/3rdparty/libxml2/libxml.h|  7 ++-
 sdk/lib/3rdparty/libxml2/parser.c|  7 ++-
 sdk/lib/3rdparty/libxml2/tree.c  | 72 +--
 sdk/lib/3rdparty/libxml2/valid.c | 59 +--
 sdk/lib/3rdparty/libxml2/xinclude.c  |  5 +-
 sdk/lib/3rdparty/libxml2/xmlregexp.c | 19 +++---
 sdk/lib/3rdparty/libxml2/xpath.c | 71 +++
 sdk/lib/3rdparty/libxml2/xpointer.c  |  1 +
 16 files changed, 226 insertions(+), 232 deletions(-)

diff --git a/media/doc/3rd Party Files.txt b/media/doc/3rd Party Files.txt
index 4d781121fa0..68c6ab5a0e1 100644
--- a/media/doc/3rd Party Files.txt 
+++ b/media/doc/3rd Party Files.txt 
@@ -239,7 +239,7 @@ URL: https://github.com/win-iconv/win-iconv
 
 Title: LibXML
 Path: sdk/lib/3rdparty/libxml2
-Used Version: 2.9.13
+Used Version: 2.9.14
 License: MIT (https://spdx.org/licenses/MIT.htmlf)
 URL: http://xmlsoft.org, ftp://xmlsoft.org/libxml2/
 
diff --git a/sdk/include/reactos/libs/libxml/xmlversion.h 
b/sdk/include/reactos/libs/libxml/xmlversion.h
index 1c8a8558ca6..9cd054df70e 100644
--- a/sdk/include/reactos/libs/libxml/xmlversion.h
+++ b/sdk/include/reactos/libs/libxml/xmlversion.h
@@ -29,28 +29,28 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  *
  * the version string like "1.2.3"
  */
-#define LIBXML_DOTTED_VERSION "2.9.13"
+#define LIBXML_DOTTED_VERSION "2.9.14"
 
 /**
  * LIBXML_VERSION:
  *
  * the version number: 1.2.3 value is 10203
  */
-#define LIBXML_VERSION 20913
+#define LIBXML_VERSION 20914
 
 /**
  * LIBXML_VERSION_STRING:
  *
  * the version number string, 1.2.3 value is "10203"
  */
-#define LIBXML_VERSION_STRING "20913"
+#define LIBXML_VERSION_STRING "20914"
 
 /**
  * LIBXML_VERSION_EXTRA:
  *
  * extra version information, used to show a git commit description
  */
-#define LIBXML_VERSION_EXTRA "-GITv2.9.12-115-ga075d256f"
+#define LIBXML_VERSION_EXTRA "-GITv2.9.13-22-g7846b0a67"
 
 /**
  * LIBXML_TEST_VERSION:
@@ -58,7 +58,7 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  * Macro to check that the libxml version in use is compatible with
  * the version the software has been compiled against
  */
-#define LIBXML_TEST_VERSION xmlCheckVersion(20913);
+#define LIBXML_TEST_VERSION xmlCheckVersion(20914);
 
 #ifndef VMS
 #if 0
diff --git a/sdk/lib/3rdparty/libxml2/HTMLparser.c 
b/sdk/lib/3rdparty/libxml2/HTMLparser.c
index 3e8a1657400..e720bb2013d 100644
--- a/sdk/lib/3rdparty/libxml2/HTMLparser.c
+++ b/sdk/lib/3rdparty/libxml2/HTMLparser.c
@@ -614,7 +614,8 @@ htmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
if (*ctxt->input->cur == 0)
xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
}
-   res++;
+   if (res < INT_MAX)
+   res++;
 }
 return(res);
 }
@@ -3960,26 +3961,6 @@ htmlParseStartTag(htmlParserCtxtPtr ctxt) {
htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
 "htmlParseStartTag: invalid element name\n",
 NULL, NULL);
-/*
- * The recovery code is disabled for now as it can result in
- * quadratic behavior with the push parser. htmlParseStartTag
- * must consume all content up to the final '>' in order to avoid
- * rescanning for this terminator.
- *
- * For a proper fix in line with HTML5, htmlParseStartTag and
- * htmlParseElement should only be called when there's an ASCII
- * alpha character following the initial '<'. Otherwise, the '<'
- * should be emitted as text (unless followed by '!', '/' or '?').
- */
-#if 0
-   /* if recover preserve text on classic misconstructs */
-   if ((ctxt->recovery) && ((IS_BLANK_CH(CUR)) || (CUR == '<') ||
-   (CUR == '=') || (CUR == '>') || (((CUR >= '0') && (CUR <= '9') {
-   htmlParseC

[ros-diffs] [reactos] 03/05: [LIBXML2] Fix forgotten config.h update. CORE-17766

2022-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=df1adce32cba8493589d1d085081dc9ad6a43326

commit df1adce32cba8493589d1d085081dc9ad6a43326
Author: Thomas Faber 
AuthorDate: Sat Nov 19 15:07:16 2022 -0500
Commit: Thomas Faber 
CommitDate: Mon Nov 21 19:46:11 2022 -0500

[LIBXML2] Fix forgotten config.h update. CORE-17766
---
 sdk/lib/3rdparty/libxml2/config.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sdk/lib/3rdparty/libxml2/config.h 
b/sdk/lib/3rdparty/libxml2/config.h
index d6756c32de0..6b5df665663 100644
--- a/sdk/lib/3rdparty/libxml2/config.h
+++ b/sdk/lib/3rdparty/libxml2/config.h
@@ -273,7 +273,7 @@
 /* #undef VA_LIST_IS_ARRAY */
 
 /* Version number of package */
-#define VERSION "2.9.9"
+#define VERSION "2.9.12"
 
 /* Determine what socket length (socklen_t) data type is */
 #define XML_SOCKLEN_T int



[ros-diffs] [reactos] 02/05: [LIBXSLT] Update to version 1.1.35. CORE-17766

2022-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f7671c1be8e87d60ecf4dac8373eac282f24b7ef

commit f7671c1be8e87d60ecf4dac8373eac282f24b7ef
Author: Thomas Faber 
AuthorDate: Sat Nov 19 15:08:52 2022 -0500
Commit: Thomas Faber 
CommitDate: Mon Nov 21 19:46:11 2022 -0500

[LIBXSLT] Update to version 1.1.35. CORE-17766
---
 dll/3rdparty/libxslt/Makefile.am |   4 +
 dll/3rdparty/libxslt/NEWS| 171 -
 dll/3rdparty/libxslt/README  |   4 +-
 dll/3rdparty/libxslt/extensions.c|   6 -
 dll/3rdparty/libxslt/functions.c |  14 +-
 dll/3rdparty/libxslt/libxslt.3   |   2 +-
 dll/3rdparty/libxslt/numbers.c   |   4 +-
 dll/3rdparty/libxslt/pattern.c   | 464 ++-
 dll/3rdparty/libxslt/preproc.c   |   2 +
 dll/3rdparty/libxslt/preproc.h   |   2 +-
 dll/3rdparty/libxslt/security.c  |   2 +-
 dll/3rdparty/libxslt/templates.c |   8 +
 dll/3rdparty/libxslt/transform.c | 124 +-
 dll/3rdparty/libxslt/xslt.c  |   8 +-
 dll/3rdparty/libxslt/xsltlocale.c|   3 +-
 dll/3rdparty/libxslt/xsltutils.c |  59 ++-
 dll/3rdparty/libxslt/xsltwin32config.h   |   6 +-
 media/doc/3rd Party Files.txt|   2 +-
 sdk/include/reactos/libs/libxslt/extensions.h|   2 +-
 sdk/include/reactos/libs/libxslt/xsltInternals.h |  26 +-
 sdk/include/reactos/libs/libxslt/xsltconfig.h|   6 +-
 21 files changed, 482 insertions(+), 437 deletions(-)

diff --git a/dll/3rdparty/libxslt/Makefile.am b/dll/3rdparty/libxslt/Makefile.am
index 2c417d0be23..a7b13f898cc 100644
--- a/dll/3rdparty/libxslt/Makefile.am
+++ b/dll/3rdparty/libxslt/Makefile.am
@@ -25,6 +25,7 @@ EXTRA_DIST = xsltConf.sh.in xslt-config.in libxslt.spec 
libxslt.spec.in \
  FEATURES TODO Copyright libxslt.m4 \
 win32/libxslt/libxslt.def win32/libxslt/libxslt.dsw \
 win32/libxslt/libxslt_so.dsp win32/libxslt/xsltproc.dsp \
+CMakeLists.txt config.h.cmake.in FindGcrypt.cmake 
libxslt-config.cmake.in libxslt-config.cmake.cmake.in \
 $(CVS_EXTRA_DIST)
 
 ## We create xsltConf.sh here and not from configure because we want
@@ -73,6 +74,9 @@ rpm: cleantar
 pkgconfigdir=$(libdir)/pkgconfig
 pkgconfig_DATA = libxslt.pc libexslt.pc
 
+cmakedir = $(libdir)/cmake/libxslt
+cmake_DATA = FindGcrypt.cmake libxslt-config.cmake
+
 m4datadir = $(datadir)/aclocal
 m4data_DATA = libxslt.m4
 
diff --git a/dll/3rdparty/libxslt/NEWS b/dll/3rdparty/libxslt/NEWS
index 7200cd33f8e..609e961568e 100644
--- a/dll/3rdparty/libxslt/NEWS
+++ b/dll/3rdparty/libxslt/NEWS
@@ -1,13 +1,176 @@
 
 NEWS file for libxslt
 
-  Note that this is automatically generated from the news webpage at:
-   http://xmlsoft.org/XSLT/news.html
-
 See the git page at 
 https://gitlab.gnome.org/GNOME/libxslt
 
-to get a description of the recent commits.Those are the public releases made:
+to get a description of the recent commits.
+v1.1.35: Feb 16 2022:
+   - Security:
+  [CVE-2021-30560] Fix use-after-free in xsltApplyTemplates
+  Fix memory leak in xsltDocumentElem (David King)
+  Fix memory leak in xsltCompileIdKeyPattern (David King)
+  Fix double-free with stylesheets containing entity nodes
+  
+   - Fixed regressions:
+  Fix performance regression with predicates in patterns
+  Fix regression in xsltComputeSortResult
+  
+   - Bug fixes:
+  Fix conflict resolution for templates with same priority
+  Fix xsl:number generating invalid UTF-8
+  Support attribute value templates in xsl:sort lang attributes
+  Don't pass first  in  twice
+  Fix quadratic runtime with text and 
+  Don't allow empty EXSLT durations
+  
+   - Improvements:
+  Add xsltproc --huge Argument via libxml XML_PARSE_HUGE (William N. Braswell, 
Jr.)
+  
+   - Tests, code quality, fuzzing:
+  Remove .travis.yml
+  Fix some misleading indentation (David King)
+  Use actual types for templates in struct _xsltStylesheet
+  Add CI for CMake on MSVC (Markus Rickert)
+  Check for null pointer before calling freelocale
+  Add CI test for Python 3
+  Don't set maxDepth in XPath contexts
+  Transfer XPath limits to XPtr context
+  Stop using maxParserDepth XPath limit
+  Make long-to-double cast explicit in date.c
+  Disable LeakSanitizer
+  Run clang CI tests with -Wimplicit-int-conversion
+  Fix implicit-int-conversion warning in exslt/crypto.c
+  Fix clang -Wimplicit-int-conversion warning (David Kilzer)
+  Fix clang -Wconditional-uninitialized warning in libxslt/numbers.c (David 
Kilzer)
+  Fix -Wshadow warnings in libexslt/dynamic.c (David Kilzer)
+  Also search parent dir for source XML when fuzzing
+  
+   - Build system, portability:
+  Add CMake build files (Markus Rickert)
+  Initial support for Python 3 (Suleyman Poyraz)
+  Call ANSI versions of W

[ros-diffs] [reactos] 01/05: [LIBXSLT] Improve sync with upstream. CORE-17766

2022-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e524b1bcf6e321c789ac27f840aa1dfbae3178f8

commit e524b1bcf6e321c789ac27f840aa1dfbae3178f8
Author: Thomas Faber 
AuthorDate: Sat Nov 19 14:41:58 2022 -0500
Commit: Thomas Faber 
CommitDate: Mon Nov 21 19:46:08 2022 -0500

[LIBXSLT] Improve sync with upstream. CORE-17766

Makefile.am: this hasn't been updated in a while
security.c: WIN32 -> _WIN32 to keep the ROS-diff consistent with the rest
win32config.h/libxslt.h: remove unnecessary ROS-diff
xsltwin32config.h: this was missed in the 1.1.34 sync
xsltexports.h: mark a ROS-diff as such
---
 dll/3rdparty/libxslt/Makefile.am   | 156 -
 dll/3rdparty/libxslt/security.c|   2 +-
 dll/3rdparty/libxslt/win32config.h |  11 +-
 dll/3rdparty/libxslt/xsltwin32config.h |   2 +-
 sdk/include/reactos/libs/libxslt/libxslt.h |   2 -
 sdk/include/reactos/libs/libxslt/xsltexports.h |   8 +-
 6 files changed, 85 insertions(+), 96 deletions(-)

diff --git a/dll/3rdparty/libxslt/Makefile.am b/dll/3rdparty/libxslt/Makefile.am
index 22dbdefac47..2c417d0be23 100644
--- a/dll/3rdparty/libxslt/Makefile.am
+++ b/dll/3rdparty/libxslt/Makefile.am
@@ -1,78 +1,78 @@
-AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/libxslt
-
-AM_CFLAGS = $(LIBXML_CFLAGS)
-
-lib_LTLIBRARIES = libxslt.la
-
-xsltincdir = $(includedir)/libxslt
-
-xsltinc_HEADERS =  \
-   xslt.h  \
-   xsltutils.h \
-   pattern.h   \
-   templates.h \
-   variables.h \
-   keys.h  \
-   numbersInternals.h  \
-   extensions.h\
-   extra.h \
-   functions.h \
-   namespaces.h\
-   imports.h   \
-   attributes.h\
-   documents.h \
-   preproc.h   \
-   transform.h \
-   security.h  \
-   xsltInternals.h \
-   xsltexports.h   \
-   xsltlocale.h
-nodist_xsltinc_HEADERS =   \
-   xsltconfig.h
-
-libxslt_la_SOURCES =   \
-   attrvt.c\
-   xslt.c  \
-   xsltlocale.c\
-   xsltutils.c \
-   pattern.c   \
-   templates.c \
-   variables.c \
-   keys.c  \
-   numbers.c   \
-   extensions.c\
-   extra.c \
-   functions.c \
-   namespaces.c\
-   imports.c   \
-   attributes.c\
-   documents.c \
-   preproc.c   \
-   transform.c \
-   security.c  \
-   win32config.h   \
-   xsltwin32config.h.in\
-   libxslt.h
-nodist_libxslt_la_SOURCES =\
-   xsltwin32config.h
-
-if USE_VERSION_SCRIPT
-LIBXSLT_VERSION_SCRIPT = $(VERSION_SCRIPT_FLAGS)$(srcdir)/libxslt.syms
-else
-LIBXSLT_VERSION_SCRIPT =
-endif
-
-libxslt_la_LIBADD = $(LIBXML_LIBS) $(EXTRA_LIBS) $(M_LIBS)
-libxslt_la_LDFLAGS =   \
-   $(LIBXSLT_VERSION_SCRIPT)   \
-   -version-info $(LIBXSLT_VERSION_INFO)
-
-man_MANS = libxslt.3
-
-EXTRA_DIST = $(man_MANS) trio.h triodef.h libxslt.syms
-
-xsltproc: all
-   @(cd ../xsltproc ; $(MAKE))
-
-install-exec-hook:
-   $(MKDIR_P) "$(DESTDIR)$(libdir)/libxslt-plugins"
+SUBDIRS = \
+   libxslt \
+   libexslt \
+   xsltproc \
+   doc \
+   $(PYTHON_SUBDIR) \
+   tests
+
+DIST_SUBDIRS = libxslt libexslt xsltproc python doc tests
+
+confexecdir=$(libdir)
+confexec_DATA = xsltConf.sh
+
+bin_SCRIPTS = xslt-config
+
+dist-hook: cleanup libxslt.spec
+   touch $(distdir)/doc/*.xml
+   touch $(distdir)/doc/EXSLT/*.xml
+   touch $(distdir)/libxslt/*.syms
+   (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn win32 vms 
examples) | (cd $(distdir); tar xf -)
+
+CVS_EXTRA_DIST =
+
+EXTRA_DIST = xsltConf.sh.in xslt-config.in libxslt.spec libxslt.spec.in \
+ FEATURES TODO Copyright libxslt.m4 \
+win32/libxslt/libxslt.def win32/libxslt/libxslt.dsw \
+win32/libxslt/libxslt_so.dsp win32/libxslt/xsltproc.dsp \
+$(CVS_EXTRA_DIST)
+
+## We create xsltConf.sh here and not from configure because we want
+## to get the paths expanded correctly.  Macros like srcdir are given
+## the value NONE in configure if the user do

[ros-diffs] [reactos] 01/01: [NTOS:CM] Consistently use synchronous I/O for registry hives.

2022-11-20 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=79b0fce5dcfd11d1ecb6880929d3660a17b34b45

commit 79b0fce5dcfd11d1ecb6880929d3660a17b34b45
Author: Thomas Faber 
AuthorDate: Tue Nov 1 20:10:04 2022 -0400
Commit: Thomas Faber 
CommitDate: Sun Nov 20 16:02:39 2022 -0500

[NTOS:CM] Consistently use synchronous I/O for registry hives.

Our current CmpFileRead/CmpFileWrite do not wait for completion,
so will cause stack corruption if used on files opened in async
mode.
---
 ntoskrnl/config/cminit.c   | 14 ++
 ntoskrnl/config/cmwraprs.c | 12 
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/ntoskrnl/config/cminit.c b/ntoskrnl/config/cminit.c
index 5d8ea072761..dd3a051e959 100644
--- a/ntoskrnl/config/cminit.c
+++ b/ntoskrnl/config/cminit.c
@@ -366,7 +366,10 @@ CmpOpenHiveFiles(IN PCUNICODE_STRING BaseName,
 /* Default attributes */
 AttributeFlags = FILE_ATTRIBUTE_NORMAL;
 
-/* Now create the file */
+/* Now create the file.
+ * Note: We use FILE_SYNCHRONOUS_IO_NONALERT here to simplify 
CmpFileRead/CmpFileWrite.
+ *   Windows does async I/O and therefore does not use this flag (or 
SYNCHRONIZE).
+ */
 Status = ZwCreateFile(Primary,
   DesiredAccess | SYNCHRONIZE,
   &ObjectAttributes,
@@ -543,16 +546,19 @@ CmpOpenHiveFiles(IN PCUNICODE_STRING BaseName,
 AttributeFlags |= FILE_ATTRIBUTE_HIDDEN;
 }
 
-/* Now create the file */
+/* Now create the file.
+ * Note: We use FILE_SYNCHRONOUS_IO_NONALERT here to simplify 
CmpFileRead/CmpFileWrite.
+ *   Windows does async I/O and therefore does not use this flag (or 
SYNCHRONIZE).
+ */
 Status = ZwCreateFile(Log,
-  DesiredAccess,
+  DesiredAccess | SYNCHRONIZE,
   &ObjectAttributes,
   &IoStatusBlock,
   NULL,
   AttributeFlags,
   ShareMode,
   CreateDisposition,
-  IoFlags,
+  FILE_SYNCHRONOUS_IO_NONALERT | IoFlags,
   NULL,
   0);
 if ((NT_SUCCESS(Status)) && (MarkAsSystemHive))
diff --git a/ntoskrnl/config/cmwraprs.c b/ntoskrnl/config/cmwraprs.c
index 0f5e47da922..b23092e0cd9 100644
--- a/ntoskrnl/config/cmwraprs.c
+++ b/ntoskrnl/config/cmwraprs.c
@@ -89,6 +89,8 @@ CmpFileRead(IN PHHIVE RegistryHive,
 _FileOffset.QuadPart = *FileOffset;
 Status = ZwReadFile(HiveHandle, NULL, NULL, NULL, &IoStatusBlock,
 Buffer, (ULONG)BufferLength, &_FileOffset, NULL);
+/* We do synchronous I/O for simplicity - see CmpOpenHiveFiles. */
+ASSERT(Status != STATUS_PENDING);
 return NT_SUCCESS(Status) ? TRUE : FALSE;
 }
 
@@ -117,6 +119,11 @@ CmpFileWrite(IN PHHIVE RegistryHive,
 _FileOffset.QuadPart = *FileOffset;
 Status = ZwWriteFile(HiveHandle, NULL, NULL, NULL, &IoStatusBlock,
  Buffer, (ULONG)BufferLength, &_FileOffset, NULL);
+/* We do synchronous I/O for simplicity - see CmpOpenHiveFiles.
+ * Windows optimizes here by starting an async write for each 64k chunk,
+ * then waiting for all writes to complete at once.
+ */
+ASSERT(Status != STATUS_PENDING);
 return NT_SUCCESS(Status) ? TRUE : FALSE;
 }
 
@@ -178,5 +185,10 @@ CmpFileFlush(IN PHHIVE RegistryHive,
 return TRUE;
 
 Status = ZwFlushBuffersFile(HiveHandle, &IoStatusBlock);
+
+/* This operation is always synchronous */
+ASSERT(Status != STATUS_PENDING);
+ASSERT(Status == IoStatusBlock.Status);
+
 return NT_SUCCESS(Status) ? TRUE : FALSE;
 }



[ros-diffs] [reactos] 04/04: [ACPICA] Update to version 20221020. CORE-17905

2022-11-06 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f0dd1e7b57b7a993c3d312f53c07b9e71c979ad4

commit f0dd1e7b57b7a993c3d312f53c07b9e71c979ad4
Author: Thomas Faber 
AuthorDate: Sat Nov 5 12:00:04 2022 -0400
Commit: Thomas Faber 
CommitDate: Sun Nov 6 08:33:29 2022 -0500

[ACPICA] Update to version 20221020. CORE-17905
---
 drivers/bus/acpi/CMakeLists.txt|   1 +
 drivers/bus/acpi/acpica/events/evevent.c   |  11 +-
 drivers/bus/acpi/acpica/events/evregion.c  |   8 +
 drivers/bus/acpi/acpica/executer/exconfig.c|   2 +-
 drivers/bus/acpi/acpica/executer/exfield.c |   6 +-
 drivers/bus/acpi/acpica/executer/exserial.c|   6 +
 drivers/bus/acpi/acpica/executer/exsystem.c|  12 --
 drivers/bus/acpi/acpica/hardware/hwsleep.c |  10 +
 drivers/bus/acpi/acpica/include/acconfig.h |   2 +
 drivers/bus/acpi/acpica/include/acdisasm.h |  19 ++
 drivers/bus/acpi/acpica/include/acglobal.h |   1 +
 drivers/bus/acpi/acpica/include/acpixf.h   |   2 +-
 drivers/bus/acpi/acpica/include/actables.h |  10 -
 drivers/bus/acpi/acpica/include/actbinfo.h |  10 +
 drivers/bus/acpi/acpica/include/actbl1.h   | 179 +++-
 drivers/bus/acpi/acpica/include/actbl2.h   | 163 ++-
 drivers/bus/acpi/acpica/include/actypes.h  |   9 +-
 drivers/bus/acpi/acpica/include/acutils.h  |  25 +++
 drivers/bus/acpi/acpica/include/acuuid.h   |   3 +-
 .../bus/acpi/acpica/include/platform/acfreebsd.h   |   4 +
 drivers/bus/acpi/acpica/tables/tbdata.c|   2 +-
 drivers/bus/acpi/acpica/tables/tbfadt.c|   2 +-
 drivers/bus/acpi/acpica/tables/tbprint.c   |  90 +---
 drivers/bus/acpi/acpica/tables/tbutils.c   |   2 +-
 drivers/bus/acpi/acpica/tables/tbxfroot.c  |  32 ++-
 .../{tables/tbprint.c => utilities/utcksum.c}  | 232 +
 drivers/bus/acpi/acpica/utilities/utglobal.c   |   1 +
 drivers/bus/acpi/acpica/utilities/utstring.c   |  10 +-
 media/doc/3rd Party Files.txt  |   2 +-
 29 files changed, 576 insertions(+), 280 deletions(-)

diff --git a/drivers/bus/acpi/CMakeLists.txt b/drivers/bus/acpi/CMakeLists.txt
index f7a3a19bf39..f9ee29be83d 100644
--- a/drivers/bus/acpi/CMakeLists.txt
+++ b/drivers/bus/acpi/CMakeLists.txt
@@ -137,6 +137,7 @@ list(APPEND ACPICA_SOURCE
 acpica/utilities/utascii.c
 acpica/utilities/utbuffer.c
 acpica/utilities/utcache.c
+acpica/utilities/utcksum.c
 # acpica/utilities/utclib.c
 acpica/utilities/utcopy.c
 # acpica/utilities/utdebug.c
diff --git a/drivers/bus/acpi/acpica/events/evevent.c 
b/drivers/bus/acpi/acpica/events/evevent.c
index 58fca82250b..e8b35823407 100644
--- a/drivers/bus/acpi/acpica/events/evevent.c
+++ b/drivers/bus/acpi/acpica/events/evevent.c
@@ -204,7 +204,8 @@ AcpiEvFixedEventInitialize (
 {
 Status = AcpiWriteBitRegister (
 AcpiGbl_FixedEventInfo[i].EnableRegisterId,
-ACPI_DISABLE_EVENT);
+(i == ACPI_EVENT_PCIE_WAKE) ?
+ACPI_ENABLE_EVENT : ACPI_DISABLE_EVENT);
 if (ACPI_FAILURE (Status))
 {
 return (Status);
@@ -253,6 +254,11 @@ AcpiEvFixedEventDetect (
 return (IntStatus);
 }
 
+if (FixedEnable & ACPI_BITMASK_PCIEXP_WAKE_DISABLE)
+ FixedEnable &= ~ACPI_BITMASK_PCIEXP_WAKE_DISABLE;
+else
+ FixedEnable |= ACPI_BITMASK_PCIEXP_WAKE_DISABLE;
+
 ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
 "Fixed Event Block: Enable %08X Status %08X\n",
 FixedEnable, FixedStatus));
@@ -323,7 +329,8 @@ AcpiEvFixedEventDispatch (
 {
 (void) AcpiWriteBitRegister (
 AcpiGbl_FixedEventInfo[Event].EnableRegisterId,
-ACPI_DISABLE_EVENT);
+(Event == ACPI_EVENT_PCIE_WAKE) ?
+   ACPI_ENABLE_EVENT : ACPI_DISABLE_EVENT);
 
 ACPI_ERROR ((AE_INFO,
 "No installed handler for fixed event - %s (%u), disabling",
diff --git a/drivers/bus/acpi/acpica/events/evregion.c 
b/drivers/bus/acpi/acpica/events/evregion.c
index a1718aa59e7..86a2d7e0c4e 100644
--- a/drivers/bus/acpi/acpica/events/evregion.c
+++ b/drivers/bus/acpi/acpica/events/evregion.c
@@ -221,6 +221,14 @@ AcpiEvAddressSpaceDispatch (
 Ctx->SubspaceId = (UINT8) RegionObj->Region.Address;
 }
 
+if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_FIXED_HARDWARE)
+{
+ACPI_FFH_INFO *Ctx = HandlerDesc->AddressSpace.Context;
+
+Ctx->Length = RegionObj->Region.Length;
+Ctx->Offset = RegionObj->Region.Address;
+}
+
 /*
  * We must exit the interpreter because the region setup will
  * potentially execute control methods (for example, the _REG method
diff --git a/drivers/bus/acpi/acpica/

[ros-diffs] [reactos] 02/04: [ACPICA] Update to version 20211217. CORE-17905

2022-11-06 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8129fee128abc9cae490a2739a5d890f1265dbe5

commit 8129fee128abc9cae490a2739a5d890f1265dbe5
Author: Thomas Faber 
AuthorDate: Sat Nov 5 11:58:41 2022 -0400
Commit: Thomas Faber 
CommitDate: Sun Nov 6 08:33:28 2022 -0500

[ACPICA] Update to version 20211217. CORE-17905
---
 drivers/bus/acpi/acpica/dispatcher/dsopcode.c |   1 +
 drivers/bus/acpi/acpica/events/evhandler.c|   2 +-
 drivers/bus/acpi/acpica/events/evregion.c |   9 ++
 drivers/bus/acpi/acpica/events/evrgnini.c |  58 ++
 drivers/bus/acpi/acpica/executer/exconfig.c   |   2 +-
 drivers/bus/acpi/acpica/executer/excreate.c   |   1 +
 drivers/bus/acpi/acpica/executer/exfield.c|   4 +-
 drivers/bus/acpi/acpica/executer/exoparg1.c   |   2 +-
 drivers/bus/acpi/acpica/executer/exregion.c   |  14 ++-
 drivers/bus/acpi/acpica/hardware/hwesleep.c   |   5 +-
 drivers/bus/acpi/acpica/hardware/hwsleep.c|   7 +-
 drivers/bus/acpi/acpica/hardware/hwxfsleep.c  |   2 -
 drivers/bus/acpi/acpica/include/acdisasm.h|  16 +++
 drivers/bus/acpi/acpica/include/acevents.h|   7 ++
 drivers/bus/acpi/acpica/include/acobject.h|   1 +
 drivers/bus/acpi/acpica/include/acpixf.h  |  10 +-
 drivers/bus/acpi/acpica/include/actables.h|   5 +-
 drivers/bus/acpi/acpica/include/actbinfo.h|   7 ++
 drivers/bus/acpi/acpica/include/actbl2.h  | 148 --
 drivers/bus/acpi/acpica/include/actypes.h |  26 -
 drivers/bus/acpi/acpica/tables/tbdata.c   |  85 +++
 drivers/bus/acpi/acpica/tables/tbfadt.c   |   6 +-
 drivers/bus/acpi/acpica/tables/tbinstal.c |  12 ++-
 drivers/bus/acpi/acpica/tables/tbprint.c  |   3 +-
 drivers/bus/acpi/acpica/tables/tbutils.c  |   3 +-
 drivers/bus/acpi/acpica/tables/tbxfload.c |  57 ++
 drivers/bus/acpi/acpica/utilities/utdelete.c  |   1 +
 media/doc/3rd Party Files.txt |   2 +-
 28 files changed, 391 insertions(+), 105 deletions(-)

diff --git a/drivers/bus/acpi/acpica/dispatcher/dsopcode.c 
b/drivers/bus/acpi/acpica/dispatcher/dsopcode.c
index fe92d8f6c91..ee0564324d9 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dsopcode.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dsopcode.c
@@ -599,6 +599,7 @@ AcpiDsEvalTableRegionOperands (
 
 ObjDesc->Region.Address = ACPI_PTR_TO_PHYSADDR (Table);
 ObjDesc->Region.Length = Table->Length;
+ObjDesc->Region.Pointer = Table;
 
 ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
 ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
diff --git a/drivers/bus/acpi/acpica/events/evhandler.c 
b/drivers/bus/acpi/acpica/events/evhandler.c
index 7d4b2a42b7c..9a761c8b667 100644
--- a/drivers/bus/acpi/acpica/events/evhandler.c
+++ b/drivers/bus/acpi/acpica/events/evhandler.c
@@ -455,7 +455,7 @@ AcpiEvInstallSpaceHandler (
 case ACPI_ADR_SPACE_DATA_TABLE:
 
 Handler = AcpiExDataTableSpaceHandler;
-Setup   = NULL;
+Setup   = AcpiEvDataTableRegionSetup;
 break;
 
 default:
diff --git a/drivers/bus/acpi/acpica/events/evregion.c 
b/drivers/bus/acpi/acpica/events/evregion.c
index 04003ded54c..d10fa1243a1 100644
--- a/drivers/bus/acpi/acpica/events/evregion.c
+++ b/drivers/bus/acpi/acpica/events/evregion.c
@@ -212,6 +212,15 @@ AcpiEvAddressSpaceDispatch (
 return_ACPI_STATUS (AE_NOT_EXIST);
 }
 
+   if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)
+   {
+   ACPI_PCC_INFO *Ctx = HandlerDesc->AddressSpace.Context;
+
+   Ctx->InternalBuffer = FieldObj->Field.InternalPccBuffer;
+   Ctx->Length = (UINT16) RegionObj->Region.Length;
+   Ctx->SubspaceId = (UINT8) RegionObj->Region.Address;
+   }
+
 /*
  * We must exit the interpreter because the region setup will
  * potentially execute control methods (for example, the _REG method
diff --git a/drivers/bus/acpi/acpica/events/evrgnini.c 
b/drivers/bus/acpi/acpica/events/evrgnini.c
index 7e601c6c8c1..26795c44de1 100644
--- a/drivers/bus/acpi/acpica/events/evrgnini.c
+++ b/drivers/bus/acpi/acpica/events/evrgnini.c
@@ -491,6 +491,64 @@ AcpiEvCmosRegionSetup (
 }
 
 
+/***
+ *
+ * FUNCTION:AcpiEvDataTableRegionSetup
+ *
+ * PARAMETERS:  Handle  - Region we are interested in
+ *  Function- Start or stop
+ *  HandlerContext  - Address space handler context
+ *  RegionContext   - Region specific context
+ *
+ * RETURN:  Status
+ *
+ * DESCRIPTION: Setup a DataTableRegion
+ *
+ * MUTEX:   Assumes namespace is not locked
+ *
+ 
**/
+
+ACPI_STATUS
+AcpiEvDataTableRegionSetup (
+ACPI_HANDLE Handle,

[ros-diffs] [reactos] 01/04: [ACPICA] Update to version 20210930. CORE-17905

2022-11-06 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9b247f6ae3a9c7fc6dc5ec469efea5c1d43d0ef4

commit 9b247f6ae3a9c7fc6dc5ec469efea5c1d43d0ef4
Author: Thomas Faber 
AuthorDate: Sat Nov 5 11:58:19 2022 -0400
Commit: Thomas Faber 
CommitDate: Sun Nov 6 08:33:25 2022 -0500

[ACPICA] Update to version 20210930. CORE-17905
---
 drivers/bus/acpi/acpica/dispatcher/dsfield.c |   2 +-
 drivers/bus/acpi/acpica/hardware/hwesleep.c  |   7 +-
 drivers/bus/acpi/acpica/hardware/hwsleep.c   |  10 +-
 drivers/bus/acpi/acpica/hardware/hwxfsleep.c |   6 +
 drivers/bus/acpi/acpica/include/acdisasm.h   |  25 ++-
 drivers/bus/acpi/acpica/include/acglobal.h   |   2 +
 drivers/bus/acpi/acpica/include/acpixf.h |   2 +-
 drivers/bus/acpi/acpica/include/actbinfo.h   |  14 ++
 drivers/bus/acpi/acpica/include/actbl2.h | 289 ++-
 drivers/bus/acpi/acpica/include/actbl3.h |  10 +-
 drivers/bus/acpi/acpica/include/actypes.h|   1 +
 drivers/bus/acpi/acpica/utilities/utosi.c|   1 +
 media/doc/3rd Party Files.txt|   2 +-
 13 files changed, 352 insertions(+), 19 deletions(-)

diff --git a/drivers/bus/acpi/acpica/dispatcher/dsfield.c 
b/drivers/bus/acpi/acpica/dispatcher/dsfield.c
index fbd1fee20e2..bf1925d8f62 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dsfield.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dsfield.c
@@ -689,7 +689,7 @@ AcpiDsInitFieldObjects (
 }
 
 #ifdef ACPI_EXEC_APP
-Flags |= ACPI_NS_OVERRIDE_IF_FOUND;
+Flags |= ACPI_NS_OVERRIDE_IF_FOUND;
 #endif
 /*
  * Walk the list of entries in the FieldList
diff --git a/drivers/bus/acpi/acpica/hardware/hwesleep.c 
b/drivers/bus/acpi/acpica/hardware/hwesleep.c
index b099d88b13c..6ec0397d2e8 100644
--- a/drivers/bus/acpi/acpica/hardware/hwesleep.c
+++ b/drivers/bus/acpi/acpica/hardware/hwesleep.c
@@ -204,18 +204,15 @@ ACPI_STATUS
 AcpiHwExtendedWakePrep (
 UINT8   SleepState)
 {
-ACPI_STATUS Status;
 UINT8   SleepTypeValue;
 
 
 ACPI_FUNCTION_TRACE (HwExtendedWakePrep);
 
 
-Status = AcpiGetSleepTypeData (ACPI_STATE_S0,
-&AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB);
-if (ACPI_SUCCESS (Status))
+if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID)
 {
-SleepTypeValue = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) &
+SleepTypeValue = ((AcpiGbl_SleepTypeAS0 << ACPI_X_SLEEP_TYPE_POSITION) 
&
 ACPI_X_SLEEP_TYPE_MASK);
 
 (void) AcpiWrite ((UINT64) (SleepTypeValue | ACPI_X_SLEEP_ENABLE),
diff --git a/drivers/bus/acpi/acpica/hardware/hwsleep.c 
b/drivers/bus/acpi/acpica/hardware/hwsleep.c
index 03d9f1aa240..22b380fb255 100644
--- a/drivers/bus/acpi/acpica/hardware/hwsleep.c
+++ b/drivers/bus/acpi/acpica/hardware/hwsleep.c
@@ -231,7 +231,7 @@ ACPI_STATUS
 AcpiHwLegacyWakePrep (
 UINT8   SleepState)
 {
-ACPI_STATUS Status;
+ACPI_STATUS Status = AE_OK;
 ACPI_BIT_REGISTER_INFO  *SleepTypeRegInfo;
 ACPI_BIT_REGISTER_INFO  *SleepEnableRegInfo;
 UINT32  Pm1aControl;
@@ -245,9 +245,7 @@ AcpiHwLegacyWakePrep (
  * This is unclear from the ACPI Spec, but it is required
  * by some machines.
  */
-Status = AcpiGetSleepTypeData (ACPI_STATE_S0,
-&AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB);
-if (ACPI_SUCCESS (Status))
+if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID)
 {
 SleepTypeRegInfo =
 AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE);
@@ -268,9 +266,9 @@ AcpiHwLegacyWakePrep (
 
 /* Insert the SLP_TYP bits */
 
-Pm1aControl |= (AcpiGbl_SleepTypeA <<
+Pm1aControl |= (AcpiGbl_SleepTypeAS0 <<
 SleepTypeRegInfo->BitPosition);
-Pm1bControl |= (AcpiGbl_SleepTypeB <<
+Pm1aControl |= (AcpiGbl_SleepTypeBS0 <<
 SleepTypeRegInfo->BitPosition);
 
 /* Write the control registers and ignore any errors */
diff --git a/drivers/bus/acpi/acpica/hardware/hwxfsleep.c 
b/drivers/bus/acpi/acpica/hardware/hwxfsleep.c
index 93bb6216671..6fcbd74743f 100644
--- a/drivers/bus/acpi/acpica/hardware/hwxfsleep.c
+++ b/drivers/bus/acpi/acpica/hardware/hwxfsleep.c
@@ -363,6 +363,12 @@ AcpiEnterSleepStatePrep (
 return_ACPI_STATUS (Status);
 }
 
+Status = AcpiGetSleepTypeData (ACPI_STATE_S0,
+&AcpiGbl_SleepTypeAS0, &AcpiGbl_SleepTypeBS0);
+if (ACPI_FAILURE (Status)) {
+AcpiGbl_SleepTypeAS0 = ACPI_SLEEP_TYPE_INVALID;
+}
+
 /* Execute the _PTS method (Prepare To Sleep) */
 
 ArgList.Count = 1;
diff --git a/drivers/bus/acpi/acpica/include/acdisasm.h 
b/drivers/bus/acpi/acpica/include/acdisasm.h
index a27e667ed33..5f3e7569e39 100644
--- a/drivers/bus/acpi/acpica/include/acdisasm.h
+++ b/drivers/bus/acpi/acpica/include/acdisasm.h
@@ -116,6 +116,7 @@ 

[ros-diffs] [reactos] 01/01: [WIN32K:NTUSER] Fix parameter check in NtUserGetAsyncKeyState. CORE-18124

2022-10-30 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=885459d8b4327be84d009532688227f9c008975e

commit 885459d8b4327be84d009532688227f9c008975e
Author: Thomas Faber 
AuthorDate: Sun Apr 10 18:29:10 2022 -0400
Commit: Thomas Faber 
CommitDate: Sun Oct 30 10:46:33 2022 -0400

[WIN32K:NTUSER] Fix parameter check in NtUserGetAsyncKeyState. CORE-18124
---
 modules/rostests/apitests/win32nt/CMakeLists.txt   |  1 +
 .../win32nt/ntuser/NtUserGetAsyncKeyState.c| 80 ++
 modules/rostests/apitests/win32nt/testlist.c   |  2 +
 win32ss/user/ntuser/keyboard.c |  2 +-
 4 files changed, 84 insertions(+), 1 deletion(-)

diff --git a/modules/rostests/apitests/win32nt/CMakeLists.txt 
b/modules/rostests/apitests/win32nt/CMakeLists.txt
index 7060f79f219..a861830bbc0 100644
--- a/modules/rostests/apitests/win32nt/CMakeLists.txt
+++ b/modules/rostests/apitests/win32nt/CMakeLists.txt
@@ -52,6 +52,7 @@ list(APPEND SOURCE
 #ntuser/NtUserEnumDisplayMonitors.c
 ntuser/NtUserEnumDisplaySettings.c
 ntuser/NtUserFindExistingCursorIcon.c
+ntuser/NtUserGetAsyncKeyState.c
 ntuser/NtUserGetClassInfo.c
 #ntuser/NtUserGetIconInfo.c
 ntuser/NtUserGetKeyboardLayoutName.c
diff --git a/modules/rostests/apitests/win32nt/ntuser/NtUserGetAsyncKeyState.c 
b/modules/rostests/apitests/win32nt/ntuser/NtUserGetAsyncKeyState.c
new file mode 100644
index 000..8e5e4cab544
--- /dev/null
+++ b/modules/rostests/apitests/win32nt/ntuser/NtUserGetAsyncKeyState.c
@@ -0,0 +1,80 @@
+/*
+ * PROJECT: ReactOS Win32k tests
+ * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Test for NtUserGetAsyncKeyState
+ * COPYRIGHT:   Copyright 2022 Thomas Faber (thomas.fa...@reactos.org)
+ */
+
+#include 
+
+START_TEST(NtUserGetAsyncKeyState)
+{
+SHORT Ret;
+DWORD Error;
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == 0xdeadbeef, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(1); // VK_LBUTTON
+Error = GetLastError();
+ok(Ret == 0 || Ret == 1, "Ret = %d\n", Ret);
+ok(Error == 0xdeadbeef, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0xfe);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == 0xdeadbeef, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0xff);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == 0xdeadbeef, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0x100);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == ERROR_INVALID_PARAMETER, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0x101);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == ERROR_INVALID_PARAMETER, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0x1000);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == ERROR_INVALID_PARAMETER, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0x7fff);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == ERROR_INVALID_PARAMETER, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(0x8000);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == ERROR_INVALID_PARAMETER, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(-2);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == ERROR_INVALID_PARAMETER, "Error = %lu\n", Error);
+
+SetLastError(0xdeadbeef);
+Ret = NtUserGetAsyncKeyState(-1);
+Error = GetLastError();
+ok(Ret == 0, "Ret = %d\n", Ret);
+ok(Error == ERROR_INVALID_PARAMETER, "Error = %lu\n", Error);
+}
diff --git a/modules/rostests/apitests/win32nt/testlist.c 
b/modules/rostests/apitests/win32nt/testlist.c
index 8d2be31fc2c..c63cc42c101 100644
--- a/modules/rostests/apitests/win32nt/testlist.c
+++ b/modules/rostests/apitests/win32nt/testlist.c
@@ -52,6 +52,7 @@ extern void func_NtUserCreateWindowEx(void);
 //extern void func_NtUserEnumDisplayMonitors(void);
 extern void func_NtUserEnumDisplaySettings(void);
 extern void func_NtUserFindExistingCursorIcon(void);
+extern void func_NtUserGetAsyncKeyState(void);
 extern void func_NtUserGetClassInfo(void);
 //extern void func_NtUserGetIconInfo(void)

[ros-diffs] [reactos] 01/01: [WIN32K:NTUSER] Remove broken assert in NtUserCreateWindowEx. CORE-18123

2022-04-03 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9f5cde9cbeab658b6530b018cd166a63ed3e321f

commit 9f5cde9cbeab658b6530b018cd166a63ed3e321f
Author: Thomas Faber 
AuthorDate: Sun Apr 3 23:43:29 2022 -0400
Commit: Thomas Faber 
CommitDate: Sun Apr 3 23:44:09 2022 -0400

[WIN32K:NTUSER] Remove broken assert in NtUserCreateWindowEx. CORE-18123
---
 win32ss/user/ntuser/window.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/win32ss/user/ntuser/window.c b/win32ss/user/ntuser/window.c
index f3aeab5d344..cba571b9196 100644
--- a/win32ss/user/ntuser/window.c
+++ b/win32ss/user/ntuser/window.c
@@ -2617,8 +2617,6 @@ NtUserCreateWindowEx(
 lstrClassName.Buffer = NULL;
 lstrClsVersion.Buffer = NULL;
 
-ASSERT(plstrWindowName);
-
 if ( (dwStyle & (WS_POPUP|WS_CHILD)) != WS_CHILD)
 {
 /* check hMenu is valid handle */



[ros-diffs] [reactos] 01/01: [NTOS:EX] Only set WakeTimer-related status if timer handle is valid. CORE-18133

2022-04-03 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7d1a497619f4001db59e552ddb69406bea4dae70

commit 7d1a497619f4001db59e552ddb69406bea4dae70
Author: Thomas Faber 
AuthorDate: Sun Apr 3 20:10:37 2022 -0400
Commit: Thomas Faber 
CommitDate: Sun Apr 3 20:13:09 2022 -0400

[NTOS:EX] Only set WakeTimer-related status if timer handle is valid. 
CORE-18133

Since STATUS_TIMER_RESUME_IGNORED is a success status, we would
otherwise go into the success case with a NULL Timer object pointer.
---
 ntoskrnl/ex/timer.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/ntoskrnl/ex/timer.c b/ntoskrnl/ex/timer.c
index 0ce7af03156..0c33675333c 100644
--- a/ntoskrnl/ex/timer.c
+++ b/ntoskrnl/ex/timer.c
@@ -640,7 +640,10 @@ NtSetTimer(IN HANDLE TimerHandle,
  * functionality required to support them, make this check dependent
  * on the actual PM capabilities
  */
-if (WakeTimer) Status = STATUS_TIMER_RESUME_IGNORED;
+if (NT_SUCCESS(Status) && WakeTimer)
+{
+Status = STATUS_TIMER_RESUME_IGNORED;
+}
 
 /* Check status */
 if (NT_SUCCESS(Status))



[ros-diffs] [reactos] 01/01: [COMSUPP] Relicense as BSD.

2022-03-15 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=be336316295278be728ea81156f77e24e7ed193a

commit be336316295278be728ea81156f77e24e7ed193a
Author: Thomas Faber 
AuthorDate: Tue Mar 15 22:09:16 2022 -0400
Commit: Thomas Faber 
CommitDate: Tue Mar 15 22:54:17 2022 -0400

[COMSUPP] Relicense as BSD.
---
 sdk/lib/comsupp/comsupp.cpp | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/sdk/lib/comsupp/comsupp.cpp b/sdk/lib/comsupp/comsupp.cpp
index 05152224502..a3e096496d9 100644
--- a/sdk/lib/comsupp/comsupp.cpp
+++ b/sdk/lib/comsupp/comsupp.cpp
@@ -1,8 +1,9 @@
 /*
- * PROJECT: ReactOS crt library
- * LICENSE: GPLv2+ - See COPYING in the top level directory
- * PURPOSE: Compiler support for COM
- * PROGRAMMER:  Thomas Faber (thomas.fa...@reactos.org)
+ * PROJECT: ReactOS crt library
+ * LICENSE: BSD-2-Clause (https://spdx.org/licenses/BSD-2-Clause)
+ * PURPOSE: Compiler support for COM
+ * COPYRIGHT:   Copyright 2013 Thomas Faber (thomas.fa...@reactos.org)
+ *  Copyright 2015 Hermès Bélusca-Maïto 
(hermes.belusca-ma...@reactos.org)
  */
 
 #include 



[ros-diffs] [reactos] 01/01: [NETCFGX] Fix uninitialized variable use.

2022-03-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=680f103f3d52bf46b41eb5249c17d097ac55a3c2

commit 680f103f3d52bf46b41eb5249c17d097ac55a3c2
Author: Thomas Faber 
AuthorDate: Sat Feb 19 09:49:27 2022 -0500
Commit: Thomas Faber 
CommitDate: Sun Mar 13 16:20:44 2022 -0400

[NETCFGX] Fix uninitialized variable use.
---
 dll/win32/netcfgx/propertypage.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/dll/win32/netcfgx/propertypage.c b/dll/win32/netcfgx/propertypage.c
index 3742e1bfe8f..d0a49e2906a 100644
--- a/dll/win32/netcfgx/propertypage.c
+++ b/dll/win32/netcfgx/propertypage.c
@@ -594,13 +594,11 @@ BuildParameterArray(
 dwDefaultMin = 0UL;
 dwDefaultMax = 65535UL; // MAX_WORD;
 }
-#if 0
 else if (ParamArray->Array[dwIndex].Type == DWORD_TYPE)
 {
 dwDefaultMin = 0UL;
 dwDefaultMax = 4294967295UL; //MAX_DWORD;
 }
-#endif
 
 if (ParamArray->Array[dwIndex].Type == INT_TYPE ||
 ParamArray->Array[dwIndex].Type == LONG_TYPE)



[ros-diffs] [reactos] 02/02: [CRT] Fix some inconsistent annotations in CRT headers.

2022-02-17 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b72efb6ca85b43097713a45f7fb72e5937fb2cd2

commit b72efb6ca85b43097713a45f7fb72e5937fb2cd2
Author: Thomas Faber 
AuthorDate: Thu Nov 25 11:13:11 2021 -0500
Commit: Thomas Faber 
CommitDate: Thu Feb 17 22:01:37 2022 -0500

[CRT] Fix some inconsistent annotations in CRT headers.

This fixes about 5000 VS analysis warnings.
---
 sdk/include/crt/io.h | 2 ++
 sdk/include/crt/stdlib.h | 2 +-
 sdk/include/crt/string.h | 2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/sdk/include/crt/io.h b/sdk/include/crt/io.h
index 404407d7dba..e6a452cc0ac 100644
--- a/sdk/include/crt/io.h
+++ b/sdk/include/crt/io.h
@@ -474,6 +474,7 @@ _getcwd(
 #include 
 #endif
 
+  _Check_return_
   __CRT_INLINE
   intptr_t
   __cdecl
@@ -492,6 +493,7 @@ _getcwd(
 return ret;
   }
 
+  _Check_return_
   __CRT_INLINE
   int
   __cdecl
diff --git a/sdk/include/crt/stdlib.h b/sdk/include/crt/stdlib.h
index 3985a547536..e3548a84a71 100644
--- a/sdk/include/crt/stdlib.h
+++ b/sdk/include/crt/stdlib.h
@@ -1432,7 +1432,7 @@ extern "C" {
   _Check_return_ long long __cdecl llabs(_In_ long long _j);
   #pragma function(llabs)
 #endif
-  __MINGW_EXTENSION __CRT_INLINE long long __cdecl llabs(_In_ long long _j) { 
return (_j >= 0 ? _j : -_j); }
+  __MINGW_EXTENSION _Check_return_ __CRT_INLINE long long __cdecl llabs(_In_ 
long long _j) { return (_j >= 0 ? _j : -_j); }
 
   __MINGW_EXTENSION long long  __cdecl strtoll(const char* __restrict__, 
char** __restrict, int);
   __MINGW_EXTENSION unsigned long long  __cdecl strtoull(const char* 
__restrict__, char** __restrict__, int);
diff --git a/sdk/include/crt/string.h b/sdk/include/crt/string.h
index 23cf26a9ce1..1dd1fe0aba1 100644
--- a/sdk/include/crt/string.h
+++ b/sdk/include/crt/string.h
@@ -508,7 +508,7 @@ extern "C" {
   _strupr_s_l(
 _Inout_updates_z_(_Size) char *_Str,
 _In_ size_t _Size,
-_locale_t _Locale);
+_In_opt_ _locale_t _Locale);
 
   _Check_return_wat_
   _CRTIMP



[ros-diffs] [reactos] 01/02: [USBPORT] Fix incorrect use of bitfields.

2022-02-17 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f5c5426924c25df4c16018cfca752963e982f485

commit f5c5426924c25df4c16018cfca752963e982f485
Author: Thomas Faber 
AuthorDate: Thu Nov 25 09:30:03 2021 -0500
Commit: Thomas Faber 
CommitDate: Thu Feb 17 22:01:34 2022 -0500

[USBPORT] Fix incorrect use of bitfields.

EndpointMoved == TRUE could never be true, because BOOL is a signed type,
and the only two values in a signed one-bit type are 0 and -1.

Courtesy of VS analysis warning C6299:
Explicitly comparing a bit field to a Boolean type will yield unexpected 
results.
---
 drivers/usb/usbport/usb2.c| 4 ++--
 drivers/usb/usbport/usbport.h | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/usbport/usb2.c b/drivers/usb/usbport/usb2.c
index 1d609addaa7..9d7a6548bc1 100644
--- a/drivers/usb/usbport/usb2.c
+++ b/drivers/usb/usbport/usb2.c
@@ -644,7 +644,7 @@ USB2_MoveTtEndpoint(IN PUSB2_TT_ENDPOINT TtEndpoint,
 TransferType = TtEndpoint->TtEndpointParams.TransferType;
 
 if (Rebalance->RebalanceEndpoint[Num] &&
-TtEndpoint->TtEndpointParams.EndpointMoved == TRUE &&
+TtEndpoint->TtEndpointParams.EndpointMoved &&
 ((TransferType != USBPORT_TRANSFER_TYPE_INTERRUPT) || BusTime >= 0))
 {
 DPRINT("USB2_MoveTtEndpoint: result - FALSE\n");
@@ -668,7 +668,7 @@ USB2_MoveTtEndpoint(IN PUSB2_TT_ENDPOINT TtEndpoint,
 *OutResult = FALSE;
 }
 
-TtEndpoint->TtEndpointParams.EndpointMoved = TRUE;
+TtEndpoint->TtEndpointParams.EndpointMoved = 1;
 
 if (Rebalance->RebalanceEndpoint[Num] == NULL)
 {
diff --git a/drivers/usb/usbport/usbport.h b/drivers/usb/usbport/usbport.h
index 04936bfe304..02726fea48c 100644
--- a/drivers/usb/usbport/usbport.h
+++ b/drivers/usb/usbport/usbport.h
@@ -486,8 +486,8 @@ typedef union _USB2_TT_ENDPOINT_PARAMS {
   struct {
 ULONG TransferType   : 4;
 ULONG Direction  : 1;
-USB_DEVICE_SPEED DeviceSpeed : 2;
-BOOL EndpointMoved   : 1;
+ULONG DeviceSpeed: 2;
+ULONG EndpointMoved  : 1;
 ULONG Reserved   : 24;
   };
   ULONG AsULONG;



[ros-diffs] [reactos] 02/02: [PORTCLS] Don't leak CPortWaveCyclic.

2022-02-15 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7db9fb3ba6d798f7ab2946aa83bd6bb75aa3f88d

commit 7db9fb3ba6d798f7ab2946aa83bd6bb75aa3f88d
Author: Thomas Faber 
AuthorDate: Tue Feb 15 08:40:20 2022 -0500
Commit: Thomas Faber 
CommitDate: Tue Feb 15 08:43:08 2022 -0500

[PORTCLS] Don't leak CPortWaveCyclic.
---
 drivers/wdm/audio/backpln/portcls/port_wavecyclic.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/wdm/audio/backpln/portcls/port_wavecyclic.cpp 
b/drivers/wdm/audio/backpln/portcls/port_wavecyclic.cpp
index f7c0afcb30c..cb54dcc275b 100644
--- a/drivers/wdm/audio/backpln/portcls/port_wavecyclic.cpp
+++ b/drivers/wdm/audio/backpln/portcls/port_wavecyclic.cpp
@@ -33,7 +33,7 @@ public:
 InterlockedDecrement(&m_Ref);
 if (!m_Ref)
 {
-//delete this;
+delete this;
 return 0;
 }
 return m_Ref;
@@ -41,7 +41,7 @@ public:
 IMP_IPortWaveCyclic;
 IMP_ISubdevice;
 IMP_IPortEvents;
-CPortWaveCyclic(IUnknown *OuterUnknown){}
+CPortWaveCyclic(IUnknown *OuterUnknown) : m_Ref(0) {}
 virtual ~CPortWaveCyclic(){}
 
 protected:



[ros-diffs] [reactos] 01/02: [PORTCLS] Do not rely on operator new to zero memory.

2022-02-15 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ec1eb52ebf3cf8ff62a0e1ea8f9dfa1e7b6c33dd

commit ec1eb52ebf3cf8ff62a0e1ea8f9dfa1e7b6c33dd
Author: Thomas Faber 
AuthorDate: Sun Jan 16 23:02:39 2022 -0500
Commit: Thomas Faber 
CommitDate: Tue Feb 15 08:43:05 2022 -0500

[PORTCLS] Do not rely on operator new to zero memory.

The standard operator new does not do this, and GCC will in fact
optimize out any zeroing done in the operator.
---
 drivers/wdm/audio/backpln/portcls/dma_slave.cpp| 24 +++
 .../wdm/audio/backpln/portcls/pin_wavecyclic.cpp   | 35 ++
 2 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/drivers/wdm/audio/backpln/portcls/dma_slave.cpp 
b/drivers/wdm/audio/backpln/portcls/dma_slave.cpp
index 4a0553b3ba8..40d5132f6f4 100644
--- a/drivers/wdm/audio/backpln/portcls/dma_slave.cpp
+++ b/drivers/wdm/audio/backpln/portcls/dma_slave.cpp
@@ -24,10 +24,7 @@ public:
 POOL_TYPE PoolType,
 ULONG Tag)
 {
-PVOID P = ExAllocatePoolWithTag(PoolType, Size, Tag);
-if (P)
-RtlZeroMemory(P, Size);
-return P;
+return ExAllocatePoolWithTag(PoolType, Size, Tag);
 }
 
 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
@@ -49,7 +46,24 @@ public:
 return m_Ref;
 }
 IMP_IDmaChannelInit;
-CDmaChannelInit(IUnknown * OuterUnknown){}
+CDmaChannelInit(IUnknown * OuterUnknown) :
+m_pDeviceObject(nullptr),
+m_pAdapter(nullptr),
+m_DmaStarted(FALSE),
+m_MapSize(0),
+m_MapRegisterBase(nullptr),
+m_LastTransferCount(0),
+m_MaximumBufferSize(0),
+m_MaxMapRegisters(0),
+m_AllocatedBufferSize(0),
+m_BufferSize(0),
+m_Address({0}),
+m_Buffer(nullptr),
+m_Mdl(nullptr),
+m_WriteToDevice(FALSE),
+m_Ref(0)
+{
+}
 virtual ~CDmaChannelInit(){}
 
 protected:
diff --git a/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp 
b/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp
index 56eba19a438..07451f6190a 100644
--- a/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp
+++ b/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp
@@ -25,10 +25,7 @@ public:
 POOL_TYPE PoolType,
 ULONG Tag)
 {
-PVOID P = ExAllocatePoolWithTag(PoolType, Size, Tag);
-if (P)
-RtlZeroMemory(P, Size);
-return P;
+return ExAllocatePoolWithTag(PoolType, Size, Tag);
 }
 
 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
@@ -51,7 +48,35 @@ public:
 }
 IMP_IPortPinWaveCyclic;
 IMP_IServiceSink;
-CPortPinWaveCyclic(IUnknown *OuterUnknown){}
+CPortPinWaveCyclic(IUnknown *OuterUnknown) :
+m_Port(nullptr),
+m_Filter(nullptr),
+m_KsPinDescriptor(nullptr),
+m_Miniport(nullptr),
+m_ServiceGroup(nullptr),
+m_DmaChannel(nullptr),
+m_Stream(nullptr),
+m_State(KSSTATE_STOP),
+m_Format(nullptr),
+m_ConnectDetails(nullptr),
+m_CommonBuffer(nullptr),
+m_CommonBufferSize(0),
+m_CommonBufferOffset(0),
+m_IrpQueue(nullptr),
+m_FrameSize(0),
+m_Capture(FALSE),
+m_TotalPackets(0),
+m_StopCount(0),
+m_Position({0}),
+m_AllocatorFraming({{0}}),
+m_Descriptor(nullptr),
+m_EventListLock(0),
+m_EventList({nullptr}),
+m_ResetState(KSRESET_BEGIN),
+m_Delay(0),
+m_Ref(0)
+{
+}
 virtual ~CPortPinWaveCyclic(){}
 
 protected:



[ros-diffs] [reactos] 01/01: [HAL:APIC] Ensure the interrupt gets requested immediately in ApicRequestSelfInterrupt. CORE-17663

2022-02-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6eccbe27ec9268e257df6aaca80d2496afb52d0e

commit 6eccbe27ec9268e257df6aaca80d2496afb52d0e
Author: Thomas Faber 
AuthorDate: Mon Jan 3 22:19:35 2022 -0500
Commit: Thomas Faber 
CommitDate: Sun Feb 13 17:15:00 2022 -0500

[HAL:APIC] Ensure the interrupt gets requested immediately in 
ApicRequestSelfInterrupt. CORE-17663
---
 hal/halx86/apic/apic.c | 35 +++
 1 file changed, 35 insertions(+)

diff --git a/hal/halx86/apic/apic.c b/hal/halx86/apic/apic.c
index 0d152539c33..0fe921149f6 100644
--- a/hal/halx86/apic/apic.c
+++ b/hal/halx86/apic/apic.c
@@ -138,7 +138,18 @@ FORCEINLINE
 VOID
 ApicRequestSelfInterrupt(IN UCHAR Vector, UCHAR TriggerMode)
 {
+ULONG Flags;
 APIC_INTERRUPT_COMMAND_REGISTER Icr;
+APIC_INTERRUPT_COMMAND_REGISTER IcrStatus;
+
+/*
+ * The IRR registers are spaced 16 bytes apart and hold 32 status bits 
each.
+ * Pre-compute the register and bit that match our vector.
+ */
+ULONG VectorHigh = Vector / 32;
+ULONG VectorLow = Vector % 32;
+ULONG Irr = APIC_IRR + 0x10 * VectorHigh;
+ULONG IrrBit = 1UL << VectorLow;
 
 /* Setup the command register */
 Icr.Long0 = 0;
@@ -147,8 +158,32 @@ ApicRequestSelfInterrupt(IN UCHAR Vector, UCHAR 
TriggerMode)
 Icr.TriggerMode = TriggerMode;
 Icr.DestinationShortHand = APIC_DSH_Self;
 
+/* Disable interrupts so that we can change IRR without being interrupted 
*/
+Flags = __readeflags();
+_disable();
+
+/* Wait for the APIC to be idle */
+do
+{
+IcrStatus.Long0 = ApicRead(APIC_ICR0);
+} while (IcrStatus.DeliveryStatus);
+
 /* Write the low dword to send the interrupt */
 ApicWrite(APIC_ICR0, Icr.Long0);
+
+/* Wait until we see the interrupt request.
+ * It will stay in requested state until we re-enable interrupts.
+ */
+while (!(ApicRead(Irr) & IrrBit))
+{
+NOTHING;
+}
+
+/* Finally, restore the original interrupt state */
+if (Flags & EFLAGS_INTERRUPT_MASK)
+{
+_enable();
+}
 }
 
 FORCEINLINE



[ros-diffs] [reactos] 01/01: [NTOS:MM] Implement partial virtual region releases. CORE-17938

2022-01-22 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8d701598fb1ac1da99df489e365c93b8a9fc6647

commit 8d701598fb1ac1da99df489e365c93b8a9fc6647
Author: Thomas Faber 
AuthorDate: Mon Dec 27 20:00:45 2021 -0500
Commit: Thomas Faber 
CommitDate: Sat Jan 22 15:07:06 2022 -0500

[NTOS:MM] Implement partial virtual region releases. CORE-17938

Fixes boot with MS videoprt.sys (and some apitests).
---
 ntoskrnl/mm/ARM3/virtual.c | 100 +
 1 file changed, 84 insertions(+), 16 deletions(-)

diff --git a/ntoskrnl/mm/ARM3/virtual.c b/ntoskrnl/mm/ARM3/virtual.c
index abe0e810074..f178edbb909 100644
--- a/ntoskrnl/mm/ARM3/virtual.c
+++ b/ntoskrnl/mm/ARM3/virtual.c
@@ -5210,8 +5210,10 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
 SIZE_T PRegionSize;
 PVOID PBaseAddress;
 LONG_PTR AlreadyDecommitted, CommitReduction = 0;
+LONG_PTR FirstCommit;
 ULONG_PTR StartingAddress, EndingAddress;
 PMMVAD Vad;
+PMMVAD NewVad;
 NTSTATUS Status;
 PEPROCESS Process;
 PMMSUPPORT AddressSpace;
@@ -5436,6 +5438,8 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
 //
 if ((EndingAddress >> PAGE_SHIFT) == Vad->EndingVpn)
 {
+//
+// Case D (freeing the entire region)
 //
 // This is the easiest one to handle -- it is identical to
 // the code path above when the caller sets a zero region 
size
@@ -5447,16 +5451,24 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
 }
 else
 {
+//
+// Case A (freeing a part at the beginning)
 //
 // This case is pretty easy too -- we compute a bunch of
 // pages to decommit, and then push the VAD's starting 
address
 // a bit further down, then decrement the commit charge
 //
-// NOT YET IMPLEMENTED IN ARM3.
-//
-DPRINT1("Case A not handled\n");
-Status = STATUS_FREE_VM_NOT_AT_BASE;
-goto FailPath;
+MiLockProcessWorkingSetUnsafe(Process, CurrentThread);
+CommitReduction = 
MiCalculatePageCommitment(StartingAddress,
+EndingAddress,
+Vad,
+Process);
+Vad->u.VadFlags.CommitCharge -= CommitReduction;
+// For ReactOS: shrink the corresponding memory area
+ASSERT(Vad->StartingVpn == 
MemoryArea->VadNode.StartingVpn);
+ASSERT(Vad->EndingVpn == MemoryArea->VadNode.EndingVpn);
+Vad->StartingVpn = (EndingAddress + 1) >> PAGE_SHIFT;
+MemoryArea->VadNode.StartingVpn = Vad->StartingVpn;
 
 //
 // After analyzing the VAD, set it to NULL so that we don't
@@ -5472,8 +5484,8 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
 //
 if ((EndingAddress >> PAGE_SHIFT) == Vad->EndingVpn)
 {
-PMEMORY_AREA MemoryArea;
-
+//
+// Case C (freeing a part at the end)
 //
 // This is pretty easy and similar to case A. We compute 
the
 // amount of pages to decommit, update the VAD's commit 
charge
@@ -5487,7 +5499,6 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
 Process);
 Vad->u.VadFlags.CommitCharge -= CommitReduction;
 // For ReactOS: shrink the corresponding memory area
-MemoryArea = MmLocateMemoryAreaByAddress(AddressSpace, 
(PVOID)StartingAddress);
 ASSERT(Vad->StartingVpn == 
MemoryArea->VadNode.StartingVpn);
 ASSERT(Vad->EndingVpn == MemoryArea->VadNode.EndingVpn);
 Vad->EndingVpn = (StartingAddress - 1) >> PAGE_SHIFT;
@@ -5496,16 +5507,73 @@ NtFreeVirtualMemory(IN HANDLE ProcessHandle,
 else
 {
 //
-// This is case B and the hardest one. Because we are 
removing
-// a chunk of memory from the very middle of the VAD, we 
must
-// actually split the VAD into two new VADs and compute the
-// commit charges for each of them, and reinsert new 
charges.
+// Case B (freeing a part in the middle)
+//
+

[ros-diffs] [reactos] 01/01: [CRT] Fix MSVC version of call_handler

2022-01-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=4cf9b7985ecb92c3da4d6cefb39a516826ecafe3

commit 4cf9b7985ecb92c3da4d6cefb39a516826ecafe3
Author: Thomas Faber 
AuthorDate: Sun Jan 16 19:48:58 2022 -0500
Commit: Thomas Faber 
CommitDate: Fri Jan 21 20:00:41 2022 -0500

[CRT] Fix MSVC version of call_handler
---
 sdk/lib/crt/except/i386/cpp.s | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sdk/lib/crt/except/i386/cpp.s b/sdk/lib/crt/except/i386/cpp.s
index 0eaa5bc64f7..0a553936060 100644
--- a/sdk/lib/crt/except/i386/cpp.s
+++ b/sdk/lib/crt/except/i386/cpp.s
@@ -159,7 +159,7 @@ _call_handler:
 push esi
 push edi
 mov ebp, [esp + 24]
-call dword ptr [esp + 29]
+call dword ptr [esp + 20]
 pop edi
 pop esi
 pop ebx



[ros-diffs] [reactos] 02/02: [NTOS:KE] Fix buffer overflow when displaying x64 bug checks

2022-01-03 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a4b2c80853b36079b93d528bdf7189f001c8c83a

commit a4b2c80853b36079b93d528bdf7189f001c8c83a
Author: Thomas Faber 
AuthorDate: Mon Jan 3 10:15:57 2022 -0500
Commit: Thomas Faber 
CommitDate: Mon Jan 3 13:25:09 2022 -0500

[NTOS:KE] Fix buffer overflow when displaying x64 bug checks
---
 ntoskrnl/ke/bug.c | 17 +
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/ntoskrnl/ke/bug.c b/ntoskrnl/ke/bug.c
index 8930e5fc88d..78bea627ad8 100644
--- a/ntoskrnl/ke/bug.c
+++ b/ntoskrnl/ke/bug.c
@@ -611,7 +611,7 @@ KiDisplayBlueScreen(IN ULONG MessageId,
 IN PCHAR HardErrMessage OPTIONAL,
 IN PCHAR Message)
 {
-CHAR AnsiName[75];
+CHAR AnsiName[107];
 
 /* Check if bootvid is installed */
 if (InbvIsBootDriverInstalled())
@@ -676,13 +676,14 @@ KiDisplayBlueScreen(IN ULONG MessageId,
 KeGetBugMessageText(BUGCHECK_TECH_INFO, NULL);
 
 /* Show the technical Data */
-sprintf(AnsiName,
-"\r\n\r\n*** STOP: 0x%08lX (0x%p,0x%p,0x%p,0x%p)\r\n\r\n",
-(ULONG)KiBugCheckData[0],
-(PVOID)KiBugCheckData[1],
-(PVOID)KiBugCheckData[2],
-(PVOID)KiBugCheckData[3],
-(PVOID)KiBugCheckData[4]);
+RtlStringCbPrintfA(AnsiName,
+   sizeof(AnsiName),
+   "\r\n\r\n*** STOP: 0x%08lX 
(0x%p,0x%p,0x%p,0x%p)\r\n\r\n",
+   (ULONG)KiBugCheckData[0],
+   (PVOID)KiBugCheckData[1],
+   (PVOID)KiBugCheckData[2],
+   (PVOID)KiBugCheckData[3],
+   (PVOID)KiBugCheckData[4]);
 InbvDisplayString(AnsiName);
 
 /* Check if we have a driver*/



[ros-diffs] [reactos] 01/02: [WIN32K:NTUSER] Fix reference leak

2022-01-03 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2a2f8dbebd3d8a4f2358d1110d01f392bebd2ad0

commit 2a2f8dbebd3d8a4f2358d1110d01f392bebd2ad0
Author: Thomas Faber 
AuthorDate: Mon Jan 3 13:23:57 2022 -0500
Commit: Thomas Faber 
CommitDate: Mon Jan 3 13:25:09 2022 -0500

[WIN32K:NTUSER] Fix reference leak
---
 win32ss/user/ntuser/ntstubs.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/win32ss/user/ntuser/ntstubs.c b/win32ss/user/ntuser/ntstubs.c
index ddf9ba09381..015f8e30650 100644
--- a/win32ss/user/ntuser/ntstubs.c
+++ b/win32ss/user/ntuser/ntstubs.c
@@ -513,7 +513,10 @@ NtUserCreateInputContext(ULONG_PTR dwClientImcData)
 
 pIMC = UserCreateInputContext(dwClientImcData);
 if (pIMC)
+{
 ret = UserHMGetHandle(pIMC);
+UserDereferenceObject(pIMC);
+}
 
 Quit:
 UserLeave();



[ros-diffs] [reactos] 01/01: [IMM32_APITEST] Fix failure messages.

2022-01-03 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7c3902e57bb1158633da3d0ca29e8947d4c8ec22

commit 7c3902e57bb1158633da3d0ca29e8947d4c8ec22
Author: Thomas Faber 
AuthorDate: Sun Jan 2 12:54:45 2022 -0500
Commit: Thomas Faber 
CommitDate: Sun Jan 2 12:54:59 2022 -0500

[IMM32_APITEST] Fix failure messages.
---
 modules/rostests/apitests/imm32/himc.c | 138 +
 1 file changed, 90 insertions(+), 48 deletions(-)

diff --git a/modules/rostests/apitests/imm32/himc.c 
b/modules/rostests/apitests/imm32/himc.c
index 05ba76448ca..050bd324e10 100644
--- a/modules/rostests/apitests/imm32/himc.c
+++ b/modules/rostests/apitests/imm32/himc.c
@@ -16,96 +16,138 @@ START_TEST(himc)
 
 /* ImmCreateContext/ImmDestroyContext and ImmLockIMC/ImmUnlockIMC */
 hNewIMC = ImmCreateContext();
-ok(hNewIMC != NULL, "\n");
+ok(hNewIMC != NULL, "ImmCreateContext failed\n");
 pIC = ImmLockIMC(hNewIMC);
-ok(pIC == NULL, "\n");
+ok(pIC == NULL, "ImmLockIMC succeeded unexpectedly\n");
 ImmUnlockIMC(hNewIMC);
-ok(ImmDestroyContext(hNewIMC), "\n");
+ok(ImmDestroyContext(hNewIMC), "ImmDestroyContext failed\n");
 
 /* ImmGetContext against NULL */
 hIMC = ImmGetContext(NULL);
-ok(hIMC == NULL, "\n");
+ok(hIMC == NULL, "ImmGetContext failed\n");
 
 /* Create EDIT control */
 style = ES_MULTILINE | ES_LEFT;
 hwndEdit = CreateWindowW(L"EDIT", NULL, style, 0, 0, 100, 20, NULL, NULL,
  GetModuleHandleW(NULL), NULL);
-ok(hwndEdit != NULL, "\n");
+ok(hwndEdit != NULL, "CreateWindowW failed\n");
 
 /* Create STATIC control */
 style = SS_LEFT;
 hwndStatic = CreateWindowW(L"STATIC", NULL, style, 0, 30, 100, 20, NULL, 
NULL,
GetModuleHandleW(NULL), NULL);
-ok(hwndStatic != NULL, "\n");
+ok(hwndStatic != NULL, "CreateWindowW failed\n");
 
 /* ImmGetContext/ImmReleaseContext and ImmLockIMC/ImmUnlockIMC */
 hIMC1 = hIMC = ImmGetContext(hwndEdit);
-ok(hIMC != NULL, "\n");
+ok(hIMC != NULL, "ImmGetContext failed\n");
 pIC = ImmLockIMC(hIMC);
-ok(pIC != NULL, "\n");
-ok(pIC && pIC->hWnd == NULL, "\n");
-ok(pIC && !pIC->fOpen, "\n");
-ok(pIC && ImmGetIMCCSize(pIC->hCompStr) != 0, "\n");
-ok(pIC && ImmGetIMCCSize(pIC->hCandInfo) != 0, "\n");
-ok(pIC && ImmGetIMCCSize(pIC->hGuideLine) != 0, "\n");
-ok(pIC && ImmGetIMCCSize(pIC->hPrivate) != 0, "\n");
-ok(pIC && ImmGetIMCCSize(pIC->hMsgBuf) != 0, "\n");
+ok(pIC != NULL, "ImmLockIMC failed\n");
+if (pIC != NULL)
+{
+ok(pIC->hWnd == NULL, "pIC->hWnd = %p\n", pIC->hWnd);
+ok(!pIC->fOpen, "pIC->fOpen = %d\n", pIC->fOpen);
+ok(ImmGetIMCCSize(pIC->hCompStr) != 0, "hCompStr size is 0\n");
+ok(ImmGetIMCCSize(pIC->hCandInfo) != 0, "hCandInfo size is 0\n");
+ok(ImmGetIMCCSize(pIC->hGuideLine) != 0, "hGuideLine size is 0\n");
+ok(ImmGetIMCCSize(pIC->hPrivate) != 0, "hPrivate size is 0\n");
+ok(ImmGetIMCCSize(pIC->hMsgBuf) != 0, "hMsgBuf size is 0\n");
+}
+else
+{
+skip("No pIC\n");
+}
 ImmUnlockIMC(hNewIMC);
 SetFocus(hwndEdit);
 pIC = ImmLockIMC(hIMC);
-ok(pIC != NULL, "\n");
-ok(pIC && pIC->hWnd == hwndEdit, "\n");
-ok(pIC && !pIC->fOpen, "\n");
+ok(pIC != NULL, "ImmLockIMC failed\n");
+if (pIC != NULL)
+{
+ok(pIC->hWnd == hwndEdit, "pIC->hWnd = %p, expected %p\n", pIC->hWnd, 
hwndEdit);
+ok(!pIC->fOpen, "pIC->fOpen = %d\n", pIC->fOpen);
+}
+else
+{
+skip("No pIC\n");
+}
 ImmUnlockIMC(hNewIMC);
 SetFocus(NULL);
 pIC = ImmLockIMC(hIMC);
-ok(pIC != NULL, "\n");
-ok(pIC && pIC->hWnd == hwndEdit, "\n");
+ok(pIC != NULL, "ImmLockIMC failed\n");
+if (pIC != NULL)
+{
+ok(pIC->hWnd == hwndEdit, "pIC->hWnd = %p, expected %p\n", pIC->hWnd, 
hwndEdit);
+}
+else
+{
+skip("No pIC\n");
+}
 ImmUnlockIMC(hNewIMC);
-ok(ImmSetOpenStatus(hIMC, TRUE), "\n");
+ok(ImmSetOpenStatus(hIMC, TRUE), "ImmSetOpenStatus failed\n");
 pIC = ImmLockIMC(hIMC);
-ok(pIC != NULL, "\n");
-ok(pIC && pIC->fOpen, "\n");
+ok(pIC != NULL, "ImmLockIMC failed\n");
+if (pIC != NULL)
+{

[ros-diffs] [reactos] 01/01: [GDI32_VISTA] Move D3DKMT functions out of gdi32. CORE-17433

2022-01-01 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=49bb853b2440c7152f34c216023e88212dafe8f1

commit 49bb853b2440c7152f34c216023e88212dafe8f1
Author: Thomas Faber 
AuthorDate: Sat Nov 13 11:43:41 2021 -0500
Commit: Thomas Faber 
CommitDate: Sat Jan 1 12:42:04 2022 -0500

[GDI32_VISTA] Move D3DKMT functions out of gdi32. CORE-17433
---
 dll/apisets/CMakeLists.txt  |  2 +-
 dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec|  4 ++--
 dll/apisets/update.py   |  1 +
 dll/directx/wine/wined3d/CMakeLists.txt |  2 +-
 modules/rostests/winetests/gdi32/CMakeLists.txt |  2 +-
 win32ss/CMakeLists.txt  |  1 +
 win32ss/gdi/gdi32/gdi32.spec|  3 ---
 win32ss/gdi/gdi32/objects/dc.c  | 13 -
 win32ss/gdi/gdi32_vista/CMakeLists.txt  | 26 +
 win32ss/gdi/gdi32_vista/dc.c| 26 +
 win32ss/gdi/gdi32_vista/gdi32_vista.rc  |  5 +
 win32ss/gdi/gdi32_vista/gdi32_vista.spec|  2 ++
 12 files changed, 66 insertions(+), 21 deletions(-)

diff --git a/dll/apisets/CMakeLists.txt b/dll/apisets/CMakeLists.txt
index 3273531b34a..f101725bf77 100644
--- a/dll/apisets/CMakeLists.txt
+++ b/dll/apisets/CMakeLists.txt
@@ -200,7 +200,7 @@ add_apiset(api-ms-win-downlevel-shlwapi-l1-1-0 0x611f 
shlwapi)
 add_apiset(api-ms-win-downlevel-shlwapi-l2-1-0 0x6120 shlwapi)
 add_apiset(api-ms-win-downlevel-user32-l1-1-0 0x6121 user32)
 add_apiset(api-ms-win-downlevel-version-l1-1-0 0x6122 version)
-add_apiset(api-ms-win-dx-d3dkmt-l1-1-0 0x6123 gdi32)
+add_apiset(api-ms-win-dx-d3dkmt-l1-1-0 0x6123 gdi32_vista gdi32)
 add_apiset(api-ms-win-eventing-classicprovider-l1-1-0 0x6129 advapi32)
 add_apiset(api-ms-win-eventing-consumer-l1-1-0 0x612a advapi32)
 add_apiset(api-ms-win-eventing-controller-l1-1-0 0x612b advapi32)
diff --git a/dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec 
b/dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec
index 241a6eab50f..a0ba046c0b6 100644
--- a/dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec
+++ b/dll/apisets/api-ms-win-dx-d3dkmt-l1-1-0.spec
@@ -14,7 +14,7 @@
 @ stub D3DKMTCreateAllocation
 @ stub D3DKMTCreateAllocation2
 @ stub D3DKMTCreateContext
-@ stdcall D3DKMTCreateDCFromMemory() gdi32.D3DKMTCreateDCFromMemory
+@ stdcall D3DKMTCreateDCFromMemory() gdi32_vista.D3DKMTCreateDCFromMemory
 @ stub D3DKMTCreateDevice
 @ stub D3DKMTCreateKeyedMutex
 @ stub D3DKMTCreateKeyedMutex2
@@ -24,7 +24,7 @@
 @ stub D3DKMTCreateSynchronizationObject2
 @ stub D3DKMTDestroyAllocation
 @ stub D3DKMTDestroyContext
-@ stdcall D3DKMTDestroyDCFromMemory() gdi32.D3DKMTDestroyDCFromMemory
+@ stdcall D3DKMTDestroyDCFromMemory() gdi32_vista.D3DKMTDestroyDCFromMemory
 @ stub D3DKMTDestroyDevice
 @ stub D3DKMTDestroyKeyedMutex
 @ stub D3DKMTDestroyOutputDupl
diff --git a/dll/apisets/update.py b/dll/apisets/update.py
index c30a8bef7d1..9ff10fe2408 100644
--- a/dll/apisets/update.py
+++ b/dll/apisets/update.py
@@ -405,6 +405,7 @@ def generate_specnames(dll_dir):
 yield (os.path.join(dll_dir, 'appcompat', 'apphelp', 'apphelp.spec'), 
'apphelp')
 yield (os.path.join(dll_dir, '..', 'win32ss', 'user', 'user32', 
'user32.spec'), 'user32')
 yield (os.path.join(dll_dir, '..', 'win32ss', 'gdi', 'gdi32', 
'gdi32.spec'), 'gdi32')
+yield (os.path.join(dll_dir, '..', 'win32ss', 'gdi', 'gdi32_vista', 
'gdi32_vista.spec'), 'gdi32_vista')
 
 def run(wineroot):
 global NL_CHAR
diff --git a/dll/directx/wine/wined3d/CMakeLists.txt 
b/dll/directx/wine/wined3d/CMakeLists.txt
index 10f144b93e6..58f15cfbc14 100644
--- a/dll/directx/wine/wined3d/CMakeLists.txt
+++ b/dll/directx/wine/wined3d/CMakeLists.txt
@@ -49,7 +49,7 @@ add_library(d3dwine MODULE
 
 set_module_type(d3dwine win32dll)
 target_link_libraries(d3dwine wine)
-add_importlibs(d3dwine user32 opengl32 gdi32 advapi32 msvcrt kernel32 ntdll)
+add_importlibs(d3dwine user32 opengl32 gdi32 gdi32_vista advapi32 msvcrt 
kernel32 ntdll)
 add_pch(d3dwine precomp.h SOURCE)
 add_cd_file(TARGET d3dwine DESTINATION reactos/system32 FOR all)
 
diff --git a/modules/rostests/winetests/gdi32/CMakeLists.txt 
b/modules/rostests/winetests/gdi32/CMakeLists.txt
index bd8ec4419d5..3a7abed6b52 100644
--- a/modules/rostests/winetests/gdi32/CMakeLists.txt
+++ b/modules/rostests/winetests/gdi32/CMakeLists.txt
@@ -31,7 +31,7 @@ if(MSVC AND ARCH STREQUAL "amd64")
 endif()
 
 set_module_type(gdi32_winetest win32cui)
-add_importlibs(gdi32_winetest gdi32 user32 advapi32 msvcrt kernel32)
+add_importlibs(gdi32_winetest gdi32 gdi32_vista user32 advapi32 msvcrt 
kernel32)
 
 if(MSVC)
 add_importlibs(gdi32_winetest ntdll)
diff --git a/win32ss/CMakeLists.t

[ros-diffs] [reactos] 01/01: [NTOS:SE] Don't assert on levels that don't allow impersonation.

2021-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=88e3ef5fa06d030d86f5d91a43f727922496da8e

commit 88e3ef5fa06d030d86f5d91a43f727922496da8e
Author: Thomas Faber 
AuthorDate: Sun Nov 21 17:18:25 2021 -0500
Commit: Thomas Faber 
CommitDate: Sun Nov 21 17:19:03 2021 -0500

[NTOS:SE] Don't assert on levels that don't allow impersonation.
---
 ntoskrnl/se/token.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/ntoskrnl/se/token.c b/ntoskrnl/se/token.c
index cd320a8dcdf..fa4a0e8d847 100644
--- a/ntoskrnl/se/token.c
+++ b/ntoskrnl/se/token.c
@@ -3582,11 +3582,13 @@ SeTokenCanImpersonate(
 
 /*
  * SecurityAnonymous and SecurityIdentification levels do not
- * allow impersonation. If we get such levels from the call
- * then something's seriously wrong.
+ * allow impersonation.
  */
-ASSERT(ImpersonationLevel != SecurityAnonymous &&
-   ImpersonationLevel != SecurityIdentification);
+if (ImpersonationLevel == SecurityAnonymous ||
+ImpersonationLevel == SecurityIdentification)
+{
+return FALSE;
+}
 
 /* Time to lock our tokens */
 SepAcquireTokenLockShared(ProcessToken);



[ros-diffs] [reactos] 03/03: [NTOS:SE] Fix always-true assert in SeTokenCanImpersonate.

2021-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d84022d7fd4149213684207a33f524cd2c00d3b8

commit d84022d7fd4149213684207a33f524cd2c00d3b8
Author: Thomas Faber 
AuthorDate: Sun Nov 21 09:34:07 2021 -0500
Commit: Thomas Faber 
CommitDate: Sun Nov 21 12:57:50 2021 -0500

[NTOS:SE] Fix always-true assert in SeTokenCanImpersonate.

Courtesy of VS analysis warning C6289:
Incorrect operator:  mutual exclusion over || is always a non-zero 
constant.  Did you intend to use && instead?
---
 ntoskrnl/se/token.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ntoskrnl/se/token.c b/ntoskrnl/se/token.c
index fb1b0a52159..cd320a8dcdf 100644
--- a/ntoskrnl/se/token.c
+++ b/ntoskrnl/se/token.c
@@ -3585,7 +3585,7 @@ SeTokenCanImpersonate(
  * allow impersonation. If we get such levels from the call
  * then something's seriously wrong.
  */
-ASSERT(ImpersonationLevel != SecurityAnonymous ||
+ASSERT(ImpersonationLevel != SecurityAnonymous &&
ImpersonationLevel != SecurityIdentification);
 
 /* Time to lock our tokens */



[ros-diffs] [reactos] 02/03: [REACTOS] Fix traces with missing arguments.

2021-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0af3689c2ea5e33b275a5096bc440ec84eb431bc

commit 0af3689c2ea5e33b275a5096bc440ec84eb431bc
Author: Thomas Faber 
AuthorDate: Sun Nov 21 12:37:04 2021 -0500
Commit: Thomas Faber 
CommitDate: Sun Nov 21 12:57:35 2021 -0500

[REACTOS] Fix traces with missing arguments.

Courtesy of VS Code Analysis warning C6064:
Missing integer argument to 'DbgPrint' that corresponds to conversion 
specifier 'N'.
---
 base/services/dcomlaunch/dcomlaunch.c   | 2 +-
 base/services/wmisvc/wmisvc.c   | 2 +-
 base/services/wuauserv/wuauserv.c   | 2 +-
 dll/win32/kernel32/winnls/string/lang.c | 4 ++--
 drivers/bus/acpi/cmbatt/cmbatt.c| 7 ---
 drivers/network/ndis/ndis/config.c  | 2 +-
 drivers/wdm/audio/drivers/CMIDriver/minwave.cpp | 2 +-
 ntoskrnl/mm/i386/page.c | 5 +++--
 ntoskrnl/se/token.c | 4 ++--
 ntoskrnl/wmi/smbios.c   | 3 ++-
 win32ss/user/ntuser/defwnd.c| 2 +-
 11 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/base/services/dcomlaunch/dcomlaunch.c 
b/base/services/dcomlaunch/dcomlaunch.c
index 49c8541c0c7..f67feb72e6e 100644
--- a/base/services/dcomlaunch/dcomlaunch.c
+++ b/base/services/dcomlaunch/dcomlaunch.c
@@ -90,7 +90,7 @@ ServiceControlHandler(DWORD dwControl,
 return ERROR_SUCCESS;
 
 default :
-DPRINT1("  Control %lu received\n");
+DPRINT1("  Control %lu received\n", dwControl);
 return ERROR_CALL_NOT_IMPLEMENTED;
 }
 }
diff --git a/base/services/wmisvc/wmisvc.c b/base/services/wmisvc/wmisvc.c
index 07c94eddd43..ee0281d3c07 100644
--- a/base/services/wmisvc/wmisvc.c
+++ b/base/services/wmisvc/wmisvc.c
@@ -112,7 +112,7 @@ ServiceControlHandler(DWORD dwControl,
 return ERROR_SUCCESS;
 
 default :
-DPRINT1("  Control %lu received\n");
+DPRINT1("  Control %lu received\n", dwControl);
 return ERROR_CALL_NOT_IMPLEMENTED;
 }
 }
diff --git a/base/services/wuauserv/wuauserv.c 
b/base/services/wuauserv/wuauserv.c
index 5ef0d287778..fed557d1b66 100644
--- a/base/services/wuauserv/wuauserv.c
+++ b/base/services/wuauserv/wuauserv.c
@@ -82,7 +82,7 @@ ServiceControlHandler(DWORD dwControl,
 return ERROR_SUCCESS;
 
 default :
-DPRINT1("WU ServiceControlHandler()  Control %lu received\n");
+DPRINT1("WU ServiceControlHandler()  Control %lu received\n", 
dwControl);
 return ERROR_CALL_NOT_IMPLEMENTED;
 }
 }
diff --git a/dll/win32/kernel32/winnls/string/lang.c 
b/dll/win32/kernel32/winnls/string/lang.c
index 06be3da8cb7..4841e7a9d57 100644
--- a/dll/win32/kernel32/winnls/string/lang.c
+++ b/dll/win32/kernel32/winnls/string/lang.c
@@ -3239,7 +3239,7 @@ EnumSystemCodePagesW (
 {
 ENUMSYSTEMCODEPAGES_CALLBACKS procs;
 
-TRACE("(%p,0x%08X,0x%08lX)\n", lpCodePageEnumProc, dwFlags);
+TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags);
 
 procs.procA = NULL;
 procs.procW = lpCodePageEnumProc;
@@ -3261,7 +3261,7 @@ EnumSystemCodePagesA (
 {
 ENUMSYSTEMCODEPAGES_CALLBACKS procs;
 
-TRACE("(%p,0x%08X,0x%08lX)\n", lpCodePageEnumProc, dwFlags);
+TRACE("(%p,0x%08X)\n", lpCodePageEnumProc, dwFlags);
 
 procs.procA = lpCodePageEnumProc;
 procs.procW = NULL;
diff --git a/drivers/bus/acpi/cmbatt/cmbatt.c b/drivers/bus/acpi/cmbatt/cmbatt.c
index 69000fcf032..257af8e4eb3 100644
--- a/drivers/bus/acpi/cmbatt/cmbatt.c
+++ b/drivers/bus/acpi/cmbatt/cmbatt.c
@@ -65,7 +65,7 @@ CmBattPowerCallBack(IN PCMBATT_DEVICE_EXTENSION 
DeviceExtension,
 else if (CmBattDebug & 0x10)
 {
 /* Unknown value */
-DbgPrint("CmBattPowerCallBack: unknown argument2 = %08x\n");
+DbgPrint("CmBattPowerCallBack: unknown argument2 = %08x\n", Value);
 }
 }
 }
@@ -770,10 +770,11 @@ CmBattSetStatusNotify(IN PCMBATT_DEVICE_EXTENSION 
DeviceExtension,
   DbgPrint("CmBattSetStatusNotify: Want %X CurrentCap %X\n",
 Capacity, DeviceExtension->RemainingCapacity);
 if (CmBattDebug & CMBATT_ACPI_WARNING)
-  DbgPrint("CmBattSetStatusNotify: Set to: [%#08lx][%#08lx][%#08lx] 
Status %x\n",
+  DbgPrint("CmBattSetStatusNotify: Set to: [%#08lx][%#08lx][%#08lx] 
Status %lx\n",
 BatteryNotify->PowerState,
 BatteryNotify->LowCapacity,
-BatteryNotify->HighCapacity);
+BatteryNotify->HighCapacity,
+Status);
 return Status;
 }
 
diff --git a/drivers/network/ndis/ndis/config.c 
b/drivers/network/ndis/ndis/conf

[ros-diffs] [reactos] 01/03: [NTOS] Fix broken SAL annotations on MmDereferenceSegmentWithLock.

2021-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a7b270347950c710c64be8f03db86918585aa0cb

commit a7b270347950c710c64be8f03db86918585aa0cb
Author: Thomas Faber 
AuthorDate: Sun Oct 31 17:02:38 2021 -0400
Commit: Thomas Faber 
CommitDate: Sun Nov 21 12:47:46 2021 -0500

[NTOS] Fix broken SAL annotations on MmDereferenceSegmentWithLock.
---
 ntoskrnl/include/internal/mm.h | 5 +++--
 ntoskrnl/mm/section.c  | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/ntoskrnl/include/internal/mm.h b/ntoskrnl/include/internal/mm.h
index bb27544a949..654f23c6ee0 100644
--- a/ntoskrnl/include/internal/mm.h
+++ b/ntoskrnl/include/internal/mm.h
@@ -1495,11 +1495,12 @@ _When_(OldIrql == MM_NOIRQL, 
_IRQL_requires_max_(DISPATCH_LEVEL))
 _When_(OldIrql == MM_NOIRQL, _Requires_lock_not_held_(MmPfnLock))
 _When_(OldIrql != MM_NOIRQL, _Requires_lock_held_(MmPfnLock))
 _When_(OldIrql != MM_NOIRQL, _Releases_lock_(MmPfnLock))
-_When_(OldIrql != MM_NOIRQL, _IRQL_restores_(OldIrql))
 _When_(OldIrql != MM_NOIRQL, _IRQL_requires_(DISPATCH_LEVEL))
 VOID
 NTAPI
-MmDereferenceSegmentWithLock(PMM_SECTION_SEGMENT Segment, KIRQL OldIrql);
+MmDereferenceSegmentWithLock(
+_In_ PMM_SECTION_SEGMENT Segment,
+_In_ _When_(OldIrql != MM_NOIRQL, _IRQL_restores_) KIRQL OldIrql);
 
 _IRQL_requires_max_(DISPATCH_LEVEL)
 _Requires_lock_not_held_(MmPfnLock)
diff --git a/ntoskrnl/mm/section.c b/ntoskrnl/mm/section.c
index e106e0a66d1..44b5710f6f4 100644
--- a/ntoskrnl/mm/section.c
+++ b/ntoskrnl/mm/section.c
@@ -991,11 +991,12 @@ _When_(OldIrql == MM_NOIRQL, 
_IRQL_requires_max_(DISPATCH_LEVEL))
 _When_(OldIrql == MM_NOIRQL, _Requires_lock_not_held_(MmPfnLock))
 _When_(OldIrql != MM_NOIRQL, _Requires_lock_held_(MmPfnLock))
 _When_(OldIrql != MM_NOIRQL, _Releases_lock_(MmPfnLock))
-_When_(OldIrql != MM_NOIRQL, _IRQL_restores_(OldIrql))
 _When_(OldIrql != MM_NOIRQL, _IRQL_requires_(DISPATCH_LEVEL))
 VOID
 NTAPI
-MmDereferenceSegmentWithLock(PMM_SECTION_SEGMENT Segment, KIRQL OldIrql)
+MmDereferenceSegmentWithLock(
+_Inout_ PMM_SECTION_SEGMENT Segment,
+_In_ _When_(OldIrql != MM_NOIRQL, _IRQL_restores_) KIRQL OldIrql)
 {
 /* Lock the PFN lock because we mess around with SectionObjectPointers */
 if (OldIrql == MM_NOIRQL)



[ros-diffs] [reactos] 01/01: [NTOS:IO] Use a guarded region in IopQueueIrpToThread.

2021-11-21 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2e76fb9fe13436a542cc647bd3cd4a016a6690b6

commit 2e76fb9fe13436a542cc647bd3cd4a016a6690b6
Author: Thomas Faber 
AuthorDate: Thu Oct 28 10:59:20 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Nov 20 14:58:51 2021 -0500

[NTOS:IO] Use a guarded region in IopQueueIrpToThread.

We're protecting against IopCompleteRequest, which is a special
kernel APC. So this is a little bit faster than raising the IRQL.
---
 ntoskrnl/include/internal/io_x.h | 17 +++--
 ntoskrnl/include/internal/ke_x.h | 36 ++--
 2 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/ntoskrnl/include/internal/io_x.h b/ntoskrnl/include/internal/io_x.h
index 7cf42e9dc02..88b19160448 100644
--- a/ntoskrnl/include/internal/io_x.h
+++ b/ntoskrnl/include/internal/io_x.h
@@ -48,22 +48,27 @@ FORCEINLINE
 VOID
 IopQueueIrpToThread(IN PIRP Irp)
 {
-KIRQL OldIrql;
+PETHREAD Thread = Irp->Tail.Overlay.Thread;
 
-/* Raise to APC Level */
-KeRaiseIrql(APC_LEVEL, &OldIrql);
+/* Disable special kernel APCs so we can't race with IopCompleteRequest.
+ * IRP's thread must be the current thread */
+KeEnterGuardedRegionThread(&Thread->Tcb);
 
 /* Insert it into the list */
-InsertHeadList(&Irp->Tail.Overlay.Thread->IrpList, &Irp->ThreadListEntry);
+InsertHeadList(&Thread->IrpList, &Irp->ThreadListEntry);
 
-/* Lower irql */
-KeLowerIrql(OldIrql);
+/* Leave the guarded region */
+KeLeaveGuardedRegionThread(&Thread->Tcb);
 }
 
 FORCEINLINE
 VOID
 IopUnQueueIrpFromThread(IN PIRP Irp)
 {
+/* Special kernel APCs must be disabled so we can't race with
+ * IopCompleteRequest (or because we are called from there) */
+ASSERT(KeAreAllApcsDisabled());
+
 /* Remove it from the list and reset it */
 if (IsListEmpty(&Irp->ThreadListEntry))
 return;
diff --git a/ntoskrnl/include/internal/ke_x.h b/ntoskrnl/include/internal/ke_x.h
index 7a00fba8f9c..70fa05e1d12 100644
--- a/ntoskrnl/include/internal/ke_x.h
+++ b/ntoskrnl/include/internal/ke_x.h
@@ -28,12 +28,12 @@ KeGetPreviousMode(VOID)
 {   \
 /* Sanity checks */ \
 ASSERT(KeGetCurrentIrql() <= APC_LEVEL);\
-ASSERT(_Thread == KeGetCurrentThread());\
-ASSERT((_Thread->SpecialApcDisable <= 0) && \
-   (_Thread->SpecialApcDisable != -32768)); \
+ASSERT((_Thread) == KeGetCurrentThread());  \
+ASSERT(((_Thread)->SpecialApcDisable <= 0) &&   \
+   ((_Thread)->SpecialApcDisable != -32768));   \
 \
 /* Disable Special APCs */  \
-_Thread->SpecialApcDisable--;   \
+(_Thread)->SpecialApcDisable--; \
 }
 
 #define KeEnterGuardedRegion()  \
@@ -49,14 +49,14 @@ KeGetPreviousMode(VOID)
 {   \
 /* Sanity checks */ \
 ASSERT(KeGetCurrentIrql() <= APC_LEVEL);\
-ASSERT(_Thread == KeGetCurrentThread());\
-ASSERT(_Thread->SpecialApcDisable < 0); \
+ASSERT((_Thread) == KeGetCurrentThread());  \
+ASSERT((_Thread)->SpecialApcDisable < 0);   \
 \
 /* Leave region and check if APCs are OK now */ \
-if (!(++_Thread->SpecialApcDisable))\
+if (!(++(_Thread)->SpecialApcDisable))  \
 {   \
 /* Check for Kernel APCs on the list */ \
-if (!IsListEmpty(&_Thread->ApcState.\
+if (!IsListEmpty(&(_Thread)->ApcState.  \
  ApcListHead[KernelMode]))  \
 {   \
 /* Check for APC Delivery */\
@@ -77,12 +77,12 @@ KeGetPreviousMode(VOID)
 #define KeEnterCritic

[ros-diffs] [reactos] 01/01: [DBGHELP] Fix default search path handling. CORE-17073

2021-11-15 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=4601d948013712974d9fd6990800c0ecfb36ed36

commit 4601d948013712974d9fd6990800c0ecfb36ed36
Author: Thomas Faber 
AuthorDate: Mon Nov 15 20:11:42 2021 -0500
Commit: Thomas Faber 
CommitDate: Mon Nov 15 20:14:34 2021 -0500

[DBGHELP] Fix default search path handling. CORE-17073

* Allow NULL search path in SymSetSearchPath
* Use . instead of concrete current directory
* Use _NT_ALT_SYMBOL_PATH variable
* Add some tests
---
 dll/win32/dbghelp/dbghelp.c  | 98 ++--
 modules/rostests/winetests/dbghelp/dbghelp.c | 67 ++-
 2 files changed, 128 insertions(+), 37 deletions(-)

diff --git a/dll/win32/dbghelp/dbghelp.c b/dll/win32/dbghelp/dbghelp.c
index c67f9730125..62c249c411b 100644
--- a/dll/win32/dbghelp/dbghelp.c
+++ b/dll/win32/dbghelp/dbghelp.c
@@ -191,6 +191,43 @@ struct cpu* cpu_find(DWORD machine)
 return NULL;
 }
 
+static WCHAR* make_default_search_path(void)
+{
+WCHAR*  search_path;
+WCHAR*  p;
+unsignedsym_path_len;
+unsignedalt_sym_path_len;
+
+sym_path_len = GetEnvironmentVariableW(L"_NT_SYMBOL_PATH", NULL, 0);
+alt_sym_path_len = GetEnvironmentVariableW(L"_NT_ALT_SYMBOL_PATH", NULL, 
0);
+
+/* The default symbol path is 
".[;%_NT_SYMBOL_PATH%][;%_NT_ALT_SYMBOL_PATH%]".
+ * If the variables exist, the lengths include a null-terminator. We use 
that
+ * space for the semicolons, and only add the initial dot and the final 
null. */
+search_path = HeapAlloc(GetProcessHeap(), 0,
+(1 + sym_path_len + alt_sym_path_len + 1) * 
sizeof(WCHAR));
+if (!search_path) return NULL;
+
+p = search_path;
+*p++ = L'.';
+if (sym_path_len)
+{
+*p++ = L';';
+GetEnvironmentVariableW(L"_NT_SYMBOL_PATH", p, sym_path_len);
+p += sym_path_len - 1;
+}
+
+if (alt_sym_path_len)
+{
+*p++ = L';';
+GetEnvironmentVariableW(L"_NT_ALT_SYMBOL_PATH", p, alt_sym_path_len);
+p += alt_sym_path_len - 1;
+}
+*p = L'\0';
+
+return search_path;
+}
+
 /**
  * SymSetSearchPathW (DBGHELP.@)
  *
@@ -198,14 +235,24 @@ struct cpu* cpu_find(DWORD machine)
 BOOL WINAPI SymSetSearchPathW(HANDLE hProcess, PCWSTR searchPath)
 {
 struct process* pcs = process_find_by_handle(hProcess);
+WCHAR*  search_path_buffer;
 
 if (!pcs) return FALSE;
-if (!searchPath) return FALSE;
 
+if (searchPath)
+{
+search_path_buffer = HeapAlloc(GetProcessHeap(), 0,
+   (lstrlenW(searchPath) + 1) * 
sizeof(WCHAR));
+if (!search_path_buffer) return FALSE;
+lstrcpyW(search_path_buffer, searchPath);
+}
+else
+{
+search_path_buffer = make_default_search_path();
+if (!search_path_buffer) return FALSE;
+}
 HeapFree(GetProcessHeap(), 0, pcs->search_path);
-pcs->search_path = lstrcpyW(HeapAlloc(GetProcessHeap(), 0,
-  (lstrlenW(searchPath) + 1) * 
sizeof(WCHAR)),
-searchPath);
+pcs->search_path = search_path_buffer;
 return TRUE;
 }
 
@@ -217,16 +264,19 @@ BOOL WINAPI SymSetSearchPath(HANDLE hProcess, PCSTR 
searchPath)
 {
 BOOLret = FALSE;
 unsignedlen;
-WCHAR*  sp;
+WCHAR*  sp = NULL;
 
-len = MultiByteToWideChar(CP_ACP, 0, searchPath, -1, NULL, 0);
-if ((sp = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR
+if (searchPath)
 {
+len = MultiByteToWideChar(CP_ACP, 0, searchPath, -1, NULL, 0);
+sp = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+if (!sp) return FALSE;
 MultiByteToWideChar(CP_ACP, 0, searchPath, -1, sp, len);
-
-ret = SymSetSearchPathW(hProcess, sp);
-HeapFree(GetProcessHeap(), 0, sp);
 }
+
+ret = SymSetSearchPathW(hProcess, sp);
+
+HeapFree(GetProcessHeap(), 0, sp);
 return ret;
 }
 
@@ -442,37 +492,13 @@ BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR 
UserSearchPath, BOOL fInvadeP
 
 if (UserSearchPath)
 {
-pcs->search_path = lstrcpyW(HeapAlloc(GetProcessHeap(), 0,
+pcs->search_path = lstrcpyW(HeapAlloc(GetProcessHeap(), 0,  
   (lstrlenW(UserSearchPath) + 1) * 
sizeof(WCHAR)),
 UserSearchPath);
 }
 else
 {
-unsignedsize;
-unsignedlen;
-static const WCHAR  sym_path[] = 
{'_','N','T','_','S','Y','M','B','O','L','_','P','A','T','H'

[ros-diffs] [reactos] 02/02: [RICHED20_WINETEST] Re-enable crashing test. CORE-16799

2021-11-14 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=68c9ac2a826bbfbb6994d4eb2ddba4e49511

commit 68c9ac2a826bbfbb6994d4eb2ddba4e49511
Author: Thomas Faber 
AuthorDate: Fri Oct 15 22:21:57 2021 -0400
Commit: Thomas Faber 
CommitDate: Sun Nov 14 20:22:34 2021 -0500

[RICHED20_WINETEST] Re-enable crashing test. CORE-16799
---
 modules/rostests/winetests/riched20/richole.c | 10 --
 1 file changed, 10 deletions(-)

diff --git a/modules/rostests/winetests/riched20/richole.c 
b/modules/rostests/winetests/riched20/richole.c
index 6de6c02901a..492bdc3fa9a 100644
--- a/modules/rostests/winetests/riched20/richole.c
+++ b/modules/rostests/winetests/riched20/richole.c
@@ -113,7 +113,6 @@ static ULONG get_refcount(IUnknown *iface)
   return IUnknown_Release(iface);
 }
 
-#if 0 /*avoid CORE-16799*/
 #define CHECK_TYPEINFO(disp,expected_riid) _check_typeinfo((IDispatch *)disp, 
expected_riid, __LINE__)
 static void _check_typeinfo(IDispatch* disp, REFIID expected_riid, int line)
 {
@@ -138,15 +137,12 @@ static void _check_typeinfo(IDispatch* disp, REFIID 
expected_riid, int line)
 ITypeInfo_ReleaseTypeAttr(typeinfo, typeattr);
 ITypeInfo_Release(typeinfo);
 }
-#endif
 
 static void test_Interfaces(void)
 {
   IRichEditOle *reOle = NULL, *reOle1 = NULL;
   ITextDocument *txtDoc = NULL;
-#if 0 /*avoid CORE-16799*/
   ITextDocument2Old *txtDoc2Old = NULL;
-#endif
   ITextSelection *txtSel = NULL, *txtSel2;
   IUnknown *punk;
   HRESULT hres;
@@ -174,9 +170,7 @@ static void test_Interfaces(void)
  (void **) &txtDoc);
   ok(hres == S_OK, "IRichEditOle_QueryInterface\n");
   ok(txtDoc != NULL, "IRichEditOle_QueryInterface\n");
-#if 0 /*avoid CORE-16799*/
   CHECK_TYPEINFO(txtDoc, &IID_ITextDocument);
-#endif
 
   hres = ITextDocument_GetSelection(txtDoc, NULL);
   ok(hres == E_INVALIDARG, "ITextDocument_GetSelection: 0x%x\n", hres);
@@ -228,7 +222,6 @@ static void test_Interfaces(void)
   hres = IRichEditOle_QueryInterface(reOle, &IID_IOleInPlaceSite, (void **) 
&punk);
   ok(hres == E_NOINTERFACE, "IRichEditOle_QueryInterface\n");
 
-#if 0 /*avoid CORE-16799*/
   hres = IRichEditOle_QueryInterface(reOle, &IID_ITextDocument2Old, (void 
**)&txtDoc2Old);
   ok(hres == S_OK, "IRichEditOle_QueryInterface\n");
   ok(txtDoc2Old != NULL, "IRichEditOle_QueryInterface\n");
@@ -238,7 +231,6 @@ static void test_Interfaces(void)
   CHECK_TYPEINFO(txtDoc2Old, &IID_ITextDocument);
 
   ITextDocument2Old_Release(txtDoc2Old);
-#endif
 
   ITextDocument_Release(txtDoc);
   IRichEditOle_Release(reOle);
@@ -253,7 +245,6 @@ static void test_Interfaces(void)
 
   ITextSelection_Release(txtSel);
 
-#if 0 /*avoid CORE-16799*/
   w = new_richedit(NULL);
   res = SendMessageA(w, EM_GETOLEINTERFACE, 0, (LPARAM)&reOle);
   ok(res, "SendMessage\n");
@@ -266,7 +257,6 @@ static void test_Interfaces(void)
   ITextDocument2Old_Release(txtDoc2Old);
   IRichEditOle_Release(reOle);
   DestroyWindow(w);
-#endif
 }
 
 static void test_ITextDocument_Open(void)



[ros-diffs] [reactos] 01/02: [SETUP] Register riched20.dll's type library during setup. CORE-16799

2021-11-14 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=be38a2ca4e9a4990f088df26cf4b557a263d2e56

commit be38a2ca4e9a4990f088df26cf4b557a263d2e56
Author: Thomas Faber 
AuthorDate: Sun Nov 14 20:20:29 2021 -0500
Commit: Thomas Faber 
CommitDate: Sun Nov 14 20:22:05 2021 -0500

[SETUP] Register riched20.dll's type library during setup. CORE-16799

This is a bit of a hack -- I'm not sure how Windows deals with this.
---
 media/inf/syssetup.inf | 1 +
 1 file changed, 1 insertion(+)

diff --git a/media/inf/syssetup.inf b/media/inf/syssetup.inf
index 41a0b782c70..2a5375352bb 100644
--- a/media/inf/syssetup.inf
+++ b/media/inf/syssetup.inf
@@ -126,6 +126,7 @@ AddReg=Classes
 11,,zipfldr.dll,1
 
 [TypeLibraries]
+riched20.dll
 stdole2.tlb
 stdole32.tlb
 mshtml.tlb



[ros-diffs] [reactos] 01/01: [RICHED20] Decorate thiscall functions as such. ROSTESTS-375 CORE-17021

2021-11-14 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c8b6abab80db2d2856dcedaa907f5b22eab3280e

commit c8b6abab80db2d2856dcedaa907f5b22eab3280e
Author: Thomas Faber 
AuthorDate: Fri Nov 12 23:25:53 2021 -0500
Commit: Thomas Faber 
CommitDate: Sun Nov 14 12:54:01 2021 -0500

[RICHED20] Decorate thiscall functions as such. ROSTESTS-375 CORE-17021
---
 dll/win32/riched20/txthost.c | 100 ++---
 dll/win32/riched20/txtsrv.c  |  64 +++---
 modules/rostests/winetests/riched20/txtsrv.c |   9 --
 sdk/include/psdk/textserv.h  | 124 +++
 4 files changed, 142 insertions(+), 155 deletions(-)

diff --git a/dll/win32/riched20/txthost.c b/dll/win32/riched20/txthost.c
index 5cdb8c06fd1..35e01633b93 100644
--- a/dll/win32/riched20/txthost.c
+++ b/dll/win32/riched20/txthost.c
@@ -103,63 +103,63 @@ static ULONG WINAPI ITextHostImpl_Release(ITextHost 
*iface)
 return ref;
 }
 
-DECLSPEC_HIDDEN HDC WINAPI ITextHostImpl_TxGetDC(ITextHost *iface)
+DECLSPEC_HIDDEN HDC __thiscall ITextHostImpl_TxGetDC(ITextHost *iface)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 return GetDC(This->hWnd);
 }
 
-DECLSPEC_HIDDEN INT WINAPI ITextHostImpl_TxReleaseDC(ITextHost *iface, HDC hdc)
+DECLSPEC_HIDDEN INT __thiscall ITextHostImpl_TxReleaseDC(ITextHost *iface, HDC 
hdc)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 return ReleaseDC(This->hWnd, hdc);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxShowScrollBar(ITextHost *iface, 
INT fnBar, BOOL fShow)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxShowScrollBar(ITextHost 
*iface, INT fnBar, BOOL fShow)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 return ShowScrollBar(This->hWnd, fnBar, fShow);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxEnableScrollBar(ITextHost *iface, 
INT fuSBFlags, INT fuArrowflags)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxEnableScrollBar(ITextHost 
*iface, INT fuSBFlags, INT fuArrowflags)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 return EnableScrollBar(This->hWnd, fuSBFlags, fuArrowflags);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetScrollRange(ITextHost *iface, 
INT fnBar, LONG nMinPos, INT nMaxPos,
-   BOOL fRedraw)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxSetScrollRange(ITextHost 
*iface, INT fnBar, LONG nMinPos, INT nMaxPos,
+   BOOL fRedraw)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 return SetScrollRange(This->hWnd, fnBar, nMinPos, nMaxPos, fRedraw);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetScrollPos(ITextHost *iface, INT 
fnBar, INT nPos, BOOL fRedraw)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxSetScrollPos(ITextHost *iface, 
INT fnBar, INT nPos, BOOL fRedraw)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 return SetScrollPos(This->hWnd, fnBar, nPos, fRedraw) != 0;
 }
 
-DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxInvalidateRect(ITextHost *iface, 
LPCRECT prc, BOOL fMode)
+DECLSPEC_HIDDEN void __thiscall ITextHostImpl_TxInvalidateRect(ITextHost 
*iface, LPCRECT prc, BOOL fMode)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 InvalidateRect(This->hWnd, prc, fMode);
 }
 
-DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxViewChange(ITextHost *iface, BOOL 
fUpdate)
+DECLSPEC_HIDDEN void __thiscall ITextHostImpl_TxViewChange(ITextHost *iface, 
BOOL fUpdate)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 if (fUpdate)
 UpdateWindow(This->hWnd);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxCreateCaret(ITextHost *iface, 
HBITMAP hbmp, INT xWidth, INT yHeight)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxCreateCaret(ITextHost *iface, 
HBITMAP hbmp, INT xWidth, INT yHeight)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 return CreateCaret(This->hWnd, hbmp, xWidth, yHeight);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxShowCaret(ITextHost *iface, BOOL 
fShow)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxShowCaret(ITextHost *iface, 
BOOL fShow)
 {
 ITextHostImpl *This = impl_from_ITextHost(iface);
 if (fShow)
@@ -168,34 +168,34 @@ DECLSPEC_HIDDEN BOOL WINAPI 
ITextHostImpl_TxShowCaret(ITextHost *iface, BOOL fSh
 return HideCaret(This->hWnd);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetCaretPos(ITextHost *iface,
-INT x, INT y)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxSetCaretPos(ITextHost *iface,
+INT x, INT y)
 {
 return SetCaretPos(x, y);
 }
 
-DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetTimer(ITextHost *iface, UINT 
idTimer, UINT uTimeout)
+DECLSPEC_HIDDEN BOOL __thiscall ITextHostImpl_TxSetTimer(ITextHost *iface, 
UINT idTimer, UINT uTimeout)
 {
 ITextHostImpl *Th

[ros-diffs] [reactos] 05/05: [NTOS:PS] Fix copypasta in NtQueryInformationJobObject. CID 1441354

2021-11-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e8b79e89ebada57f3ba3009152206dc70d7ada86

commit e8b79e89ebada57f3ba3009152206dc70d7ada86
Author: Thomas Faber 
AuthorDate: Sat Oct 30 19:43:27 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Nov 13 21:23:40 2021 -0500

[NTOS:PS] Fix copypasta in NtQueryInformationJobObject. CID 1441354
---
 ntoskrnl/ps/job.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ntoskrnl/ps/job.c b/ntoskrnl/ps/job.c
index 8b130010bfd..9526e2be0dc 100644
--- a/ntoskrnl/ps/job.c
+++ b/ntoskrnl/ps/job.c
@@ -546,10 +546,10 @@ NtQueryInformationJobObject (
 ProbeForWrite(JobInformation, JobInformationLength, 
RequiredAlign);
 }
 
-/* But also return lenght if asked */
+/* But also return length if asked */
 if (ReturnLength != NULL)
 {
-ProbeForWrite(JobInformation, sizeof(ULONG), sizeof(ULONG));
+ProbeForWriteUlong(ReturnLength);
 }
 }
 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)



[ros-diffs] [reactos] 04/05: [NTOS:IO] Correctly deal with exceptions when handling FileFsDriverPathInformation. CID 1476847

2021-11-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=34f2b7830d2081ea0cf1080fdf2ab70113448d26

commit 34f2b7830d2081ea0cf1080fdf2ab70113448d26
Author: Thomas Faber 
AuthorDate: Thu Oct 28 11:23:02 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Nov 13 21:23:39 2021 -0500

[NTOS:IO] Correctly deal with exceptions when handling 
FileFsDriverPathInformation. CID 1476847
---
 ntoskrnl/io/iomgr/iofunc.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c
index 784a836a15d..b9bf75736f5 100644
--- a/ntoskrnl/io/iomgr/iofunc.c
+++ b/ntoskrnl/io/iomgr/iofunc.c
@@ -4259,7 +4259,7 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
 /* This is to be handled by the kernel, not by FSD */
 else if (FsInformationClass == FileFsDriverPathInformation)
 {
-PFILE_FS_DRIVER_PATH_INFORMATION DriverPathInfo;
+_SEH2_VOLATILE PFILE_FS_DRIVER_PATH_INFORMATION DriverPathInfo = NULL;
 
 _SEH2_TRY
 {
@@ -4270,7 +4270,9 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
 RtlCopyMemory(DriverPathInfo, FsInformation, Length);
 
 /* Is the driver in the IO path? */
-Status = IopGetDriverPathInformation(FileObject, DriverPathInfo, 
Length);
+Status = IopGetDriverPathInformation(FileObject,
+ 
(PFILE_FS_DRIVER_PATH_INFORMATION)DriverPathInfo,
+ Length);
 /* We failed, don't continue execution */
 if (!NT_SUCCESS(Status))
 {



[ros-diffs] [reactos] 03/05: [NTOS:IO] Don't call IopCompleteRequest with uninitialized context values. CID 716761

2021-11-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a74ff5be178fd252d743d41558130ffefecf8321

commit a74ff5be178fd252d743d41558130ffefecf8321
Author: Thomas Faber 
AuthorDate: Thu Oct 28 11:17:03 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Nov 13 21:23:39 2021 -0500

[NTOS:IO] Don't call IopCompleteRequest with uninitialized context values. 
CID 716761

NormalContext and NormalRoutine are just for good measure, but
SystemArgument2 is actually used by the function.
And yes, this appears to be a bug in Win 2003.
---
 ntoskrnl/io/iomgr/iofunc.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c
index eeb6040cf30..784a836a15d 100644
--- a/ntoskrnl/io/iomgr/iofunc.c
+++ b/ntoskrnl/io/iomgr/iofunc.c
@@ -148,6 +148,8 @@ IopPerformSynchronousRequest(IN PDEVICE_OBJECT DeviceObject,
 if (Status != STATUS_PENDING)
 {
 /* Complete it ourselves */
+NormalRoutine = NULL;
+NormalContext = NULL;
 ASSERT(!Irp->PendingReturned);
 KeRaiseIrql(APC_LEVEL, &OldIrql);
 IopCompleteRequest(&Irp->Tail.Apc,
@@ -2640,6 +2642,8 @@ NtQueryInformationFile(IN HANDLE FileHandle,
 Irp->UserIosb = IoStatusBlock;
 
 /* The IRP wasn't completed, complete it ourselves */
+NormalRoutine = NULL;
+NormalContext = NULL;
 KeRaiseIrql(APC_LEVEL, &OldIrql);
 IopCompleteRequest(&Irp->Tail.Apc,
&NormalRoutine,
@@ -3480,6 +3484,8 @@ NtSetInformationFile(IN HANDLE FileHandle,
 Irp->UserIosb = IoStatusBlock;
 
 /* The IRP wasn't completed, complete it ourselves */
+NormalRoutine = NULL;
+NormalContext = NULL;
 KeRaiseIrql(APC_LEVEL, &OldIrql);
 IopCompleteRequest(&Irp->Tail.Apc,
&NormalRoutine,



[ros-diffs] [reactos] 02/05: [NTOS:EX] Assert some AcquireResource return values. CID 1321882

2021-11-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8254585be535d8cec4b9dc36e8ba357adb103807

commit 8254585be535d8cec4b9dc36e8ba357adb103807
Author: Thomas Faber 
AuthorDate: Thu Oct 28 09:48:48 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Nov 13 21:23:39 2021 -0500

[NTOS:EX] Assert some AcquireResource return values. CID 1321882
---
 ntoskrnl/ex/resource.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ntoskrnl/ex/resource.c b/ntoskrnl/ex/resource.c
index bf6fd82d58d..5b90c89813c 100644
--- a/ntoskrnl/ex/resource.c
+++ b/ntoskrnl/ex/resource.c
@@ -2192,7 +2192,7 @@ ExEnterCriticalRegionAndAcquireResourceExclusive(IN 
PERESOURCE Resource)
 KeEnterCriticalRegion();
 
 /* Acquire the resource */
-ExAcquireResourceExclusiveLite(Resource, TRUE);
+NT_VERIFY(ExAcquireResourceExclusiveLite(Resource, TRUE));
 
 /* Return the Win32 Thread */
 return KeGetCurrentThread()->Win32Thread;
@@ -2221,7 +2221,7 @@ ExEnterCriticalRegionAndAcquireResourceShared(IN 
PERESOURCE Resource)
 KeEnterCriticalRegion();
 
 /* Acquire the resource */
-ExAcquireResourceSharedLite(Resource, TRUE);
+NT_VERIFY(ExAcquireResourceSharedLite(Resource, TRUE));
 
 /* Return the Win32 Thread */
 return KeGetCurrentThread()->Win32Thread;
@@ -2252,7 +2252,7 @@ ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(IN 
PERESOURCE Resource)
 KeEnterCriticalRegion();
 
 /* Acquire the resource */
-ExAcquireSharedWaitForExclusive(Resource, TRUE);
+NT_VERIFY(ExAcquireSharedWaitForExclusive(Resource, TRUE));
 
 /* Return the Win32 Thread */
 return KeGetCurrentThread()->Win32Thread;



[ros-diffs] [reactos] 01/05: [NTOS:EX] Correctly handle OOM in NtFindAtom. CID 1237072

2021-11-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=aa9a09819614c27a69c15116c1567b5351225186

commit aa9a09819614c27a69c15116c1567b5351225186
Author: Thomas Faber 
AuthorDate: Wed Oct 27 22:51:15 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Nov 13 21:23:36 2021 -0500

[NTOS:EX] Correctly handle OOM in NtFindAtom. CID 1237072
---
 ntoskrnl/ex/atom.c | 29 +
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/ntoskrnl/ex/atom.c b/ntoskrnl/ex/atom.c
index 93d78a661bf..a33e0e9bccb 100644
--- a/ntoskrnl/ex/atom.c
+++ b/ntoskrnl/ex/atom.c
@@ -249,7 +249,7 @@ NtFindAtom(IN PWSTR AtomName,
 PRTL_ATOM_TABLE AtomTable = ExpGetGlobalAtomTable();
 NTSTATUS Status;
 KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-LPWSTR CapturedName = NULL;
+_SEH2_VOLATILE LPWSTR CapturedName;
 ULONG CapturedSize;
 RTL_ATOM SafeAtom;
 PAGED_CODE();
@@ -283,20 +283,12 @@ NtFindAtom(IN PWSTR AtomName,
 /* Allocate an aligned buffer + the null char */
 CapturedSize = ((AtomNameLength + sizeof(WCHAR)) &~
 (sizeof(WCHAR) -1));
-CapturedName = ExAllocatePoolWithTag(PagedPool,
- CapturedSize,
- TAG_ATOM);
-if (!CapturedName)
-{
-/* Fail the call */
-Status = STATUS_INSUFFICIENT_RESOURCES;
-}
-else
-{
-/* Copy the name and null-terminate it */
-RtlCopyMemory(CapturedName, AtomName, AtomNameLength);
-CapturedName[AtomNameLength / sizeof(WCHAR)] = 
UNICODE_NULL;
-}
+CapturedName = ExAllocatePoolWithQuotaTag(PagedPool,
+  CapturedSize,
+  TAG_ATOM);
+/* Copy the name and null-terminate it */
+RtlCopyMemory(CapturedName, AtomName, AtomNameLength);
+CapturedName[AtomNameLength / sizeof(WCHAR)] = UNICODE_NULL;
 
 /* Probe the atom too */
 if (Atom) ProbeForWriteUshort(Atom);
@@ -304,6 +296,11 @@ NtFindAtom(IN PWSTR AtomName,
 }
 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
 {
+if (CapturedName != AtomName)
+{
+ExFreePoolWithTag(CapturedName, TAG_ATOM);
+}
+
 /* Return the exception code */
 _SEH2_YIELD(return _SEH2_GetExceptionCode());
 }
@@ -314,7 +311,7 @@ NtFindAtom(IN PWSTR AtomName,
 Status = RtlLookupAtomInAtomTable(AtomTable, CapturedName, &SafeAtom);
 if (NT_SUCCESS(Status) && (Atom))
 {
-/* Success and caller wants the atom back.. .enter SEH */
+/* Success and caller wants the atom back... enter SEH */
 _SEH2_TRY
 {
 /* Return the atom */



[ros-diffs] [reactos] 01/01: [BOOTDATA] Include VMXNET3 driver in optional.

2021-11-13 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7be3e798d515c588cd136536847018d54170d72e

commit 7be3e798d515c588cd136536847018d54170d72e
Author: Thomas Faber 
AuthorDate: Sat Nov 13 11:07:03 2021 -0500
Commit: Thomas Faber 
CommitDate: Sat Nov 13 13:34:50 2021 -0500

[BOOTDATA] Include VMXNET3 driver in optional.
---
 boot/bootdata/packages/reactos.dff.in | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/boot/bootdata/packages/reactos.dff.in 
b/boot/bootdata/packages/reactos.dff.in
index de8d43c9d46..dbf0737ff83 100644
--- a/boot/bootdata/packages/reactos.dff.in
+++ b/boot/bootdata/packages/reactos.dff.in
@@ -153,6 +153,8 @@ Signature = "$Windows NT$"
 "modules/optional/vmx_mode.dll"   2  optional
 "modules/optional/vmx_svga.inf"   6  optional
 "modules/optional/vmx_svga.sys"   3  optional
+"modules/optional/vmxnet3ndis5.inf"   6  optional
+"modules/optional/vmxnet3n51x86.sys"  3  optional
 "modules/optional/wine_gecko-2.40-x86.msi"1  optional
 "boot/bootdata/bootcdregtest/AHKAppTests.cmd" 7  optional
 ; DON'T REMOVE THE FOLLOWING NEW LINE ! THIS MEANS YOU !



[ros-diffs] [reactos] 04/04: [WIN32K] Fix uninitialized bResult in IntExtTextOutW.

2021-10-29 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3a323c3de0b9721cb1981080ecee68c30388e5ef

commit 3a323c3de0b9721cb1981080ecee68c30388e5ef
Author: Thomas Faber 
AuthorDate: Fri Oct 15 22:35:32 2021 -0400
Commit: Thomas Faber 
CommitDate: Fri Oct 29 22:06:49 2021 -0400

[WIN32K] Fix uninitialized bResult in IntExtTextOutW.

Powered by clang-cl.
---
 win32ss/gdi/ntgdi/freetype.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c
index 55bb3612e45..b56aab526d6 100644
--- a/win32ss/gdi/ntgdi/freetype.c
+++ b/win32ss/gdi/ntgdi/freetype.c
@@ -6168,6 +6168,7 @@ IntExtTextOutW(
 {
 DPRINT1("Failed to render glyph! [index: %d]\n", 
glyph_index);
 IntUnLockFreeType();
+bResult = FALSE;
 goto Cleanup;
 }
 
@@ -6243,6 +6244,7 @@ IntExtTextOutW(
 {
 DPRINT1("Failed to load and render glyph! [index: %d]\n", 
glyph_index);
 IntUnLockFreeType();
+bResult = FALSE;
 goto Cleanup;
 }
 
@@ -6256,6 +6258,7 @@ IntExtTextOutW(
 {
 DPRINT1("Failed to render glyph! [index: %d]\n", glyph_index);
 IntUnLockFreeType();
+bResult = FALSE;
 goto Cleanup;
 }
 



[ros-diffs] [reactos] 03/04: [WIN32K] Mark default as unreachable.

2021-10-29 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=4bc95812fd70ea382e234b3c8e2e043f51fcae3a

commit 4bc95812fd70ea382e234b3c8e2e043f51fcae3a
Author: Thomas Faber 
AuthorDate: Fri Oct 15 22:31:38 2021 -0400
Commit: Thomas Faber 
CommitDate: Fri Oct 29 22:06:49 2021 -0400

[WIN32K] Mark default as unreachable.

Powered by clang-cl.
---
 win32ss/user/ntuser/defwnd.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/win32ss/user/ntuser/defwnd.c b/win32ss/user/ntuser/defwnd.c
index 4bfe24e3d55..660fd4c1494 100644
--- a/win32ss/user/ntuser/defwnd.c
+++ b/win32ss/user/ntuser/defwnd.c
@@ -486,8 +486,7 @@ DefWndGetIcon(PWND pWnd, WPARAM wParam, LPARAM lParam)
 case ICON_SMALL2:
 hIconRet = UserGetProp(pWnd, gpsi->atomIconSmProp, TRUE);
 break;
-default:
-break;
+DEFAULT_UNREACHABLE;
 }
 return (LRESULT)hIconRet;
 }



[ros-diffs] [reactos] 02/04: [WIN32K] Remove unnecessary if in NtUserGetGUIThreadInfo.

2021-10-29 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3235e35dee1fb20b462e55a60fcafef63fe70638

commit 3235e35dee1fb20b462e55a60fcafef63fe70638
Author: Thomas Faber 
AuthorDate: Fri Oct 15 22:30:34 2021 -0400
Commit: Thomas Faber 
CommitDate: Fri Oct 29 22:06:49 2021 -0400

[WIN32K] Remove unnecessary if in NtUserGetGUIThreadInfo.

This condition is already checked above.
Powered by clang-cl.
---
 win32ss/user/ntuser/misc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/win32ss/user/ntuser/misc.c b/win32ss/user/ntuser/misc.c
index f8c0d3e1ec3..10fa0144f16 100644
--- a/win32ss/user/ntuser/misc.c
+++ b/win32ss/user/ntuser/misc.c
@@ -426,7 +426,7 @@ NtUserGetGUIThreadInfo(
 MsgQueue = W32Thread->MessageQueue;
   else
   {
-if ( Desktop ) MsgQueue = Desktop->ActiveMessageQueue;
+MsgQueue = Desktop->ActiveMessageQueue;
   }
}
else



[ros-diffs] [reactos] 01/04: [WIN32K] Fix uninitialized hNewMenu use in MENU_DoNextMenu.

2021-10-29 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=42657493ef5b1dd7e7718ecf5f3c84606e5d8e9f

commit 42657493ef5b1dd7e7718ecf5f3c84606e5d8e9f
Author: Thomas Faber 
AuthorDate: Fri Oct 15 22:30:04 2021 -0400
Commit: Thomas Faber 
CommitDate: Fri Oct 29 22:06:46 2021 -0400

[WIN32K] Fix uninitialized hNewMenu use in MENU_DoNextMenu.

See also: Wine's implementation.
Powered by clang-cl.
---
 win32ss/user/ntuser/menu.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/win32ss/user/ntuser/menu.c b/win32ss/user/ntuser/menu.c
index 3c006fcd5a6..fb169b6e472 100644
--- a/win32ss/user/ntuser/menu.c
+++ b/win32ss/user/ntuser/menu.c
@@ -3813,6 +3813,7 @@ static LRESULT FASTCALL MENU_DoNextMenu(MTRACKER* pmt, 
UINT Vk, UINT wFlags)
   /* switch to the system menu */
   MenuTmp = get_win_sys_menu(hNewWnd);
   if (MenuTmp) hNewMenu = UserHMGetHandle(MenuTmp);
+  else hNewMenu = NULL;
   }
   else
   return FALSE;



[ros-diffs] [reactos] 06/06: [CODEOWNERS] Don't automatically add me to apitests and CMake PRs.

2021-10-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f4ccc518e35fe7747cfdf0d92173d0b8cac29222

commit f4ccc518e35fe7747cfdf0d92173d0b8cac29222
Author: Thomas Faber 
AuthorDate: Sat Oct 16 11:33:53 2021 -0400
Commit: Thomas Faber 
CommitDate: Wed Oct 27 19:27:33 2021 -0400

[CODEOWNERS] Don't automatically add me to apitests and CMake PRs.

Still feel free to request my review explicitly if desired.
---
 CODEOWNERS | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/CODEOWNERS b/CODEOWNERS
index 13d3ad435c6..86f8aa11961 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -39,7 +39,7 @@
 ## As responsible, he may refuse a local patch if you did not try to
 ## upstream your changes.
 
-## If you want to get listed in that file, either put yourself in the
+## If you want to get listed in this file, either put yourself in the
 ## file and push it, or open a pull request. You can also ask a person
 ## who has push access to add yourself.
 
@@ -121,8 +121,8 @@
 #   R: learn-more, learn_more, Mark Jansen
 #   R: ThFabba, Thomas Faber
 #   S: Maintained
-/sdk/cmake/ @learn-more @ThFabba
-*.cmake @learn-more @ThFabba
+/sdk/cmake/ @learn-more
+*.cmake @learn-more
 
 # File Patch API
 #   M: learn-more, learn_more, Mark Jansen
@@ -225,7 +225,7 @@
 #   R: learn-more, learn_more, Mark Jansen
 #   R: ThFabba, Thomas Faber
 #   S: Maintained
-/modules/rostests/apitests/ @learn-more @ThFabba
+/modules/rostests/apitests/ @learn-more
 
 # ReactOS Kernel-Mode Tests
 #   M: ThFabba, Thomas Faber



[ros-diffs] [reactos] 05/06: [USBUHCI] Fix always-false HcFlavor checks.

2021-10-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fb3e2c7c8b8111bbbf0b6881573a203d8c8ec659

commit fb3e2c7c8b8111bbbf0b6881573a203d8c8ec659
Author: Thomas Faber 
AuthorDate: Sat Oct 9 16:01:47 2021 -0400
Commit: Thomas Faber 
CommitDate: Wed Oct 27 19:27:33 2021 -0400

[USBUHCI] Fix always-false HcFlavor checks.

Powered by clang-cl.
---
 drivers/usb/usbuhci/roothub.c | 18 +-
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/usbuhci/roothub.c b/drivers/usb/usbuhci/roothub.c
index 286e5c3fd3d..7c166122c68 100644
--- a/drivers/usb/usbuhci/roothub.c
+++ b/drivers/usb/usbuhci/roothub.c
@@ -195,13 +195,13 @@ UhciRHPortResetComplete(IN PVOID uhciExtension,
 PortControl.PortEnableDisableChange = 1;
 WRITE_PORT_USHORT(PortControlRegister, PortControl.AsUSHORT);
 
-if (UhciExtension->HcFlavor == UHCI_VIA &&
-UhciExtension->HcFlavor == UHCI_VIA_x01 &&
-UhciExtension->HcFlavor == UHCI_VIA_x02 &&
-UhciExtension->HcFlavor == UHCI_VIA_x03 &&
+if (UhciExtension->HcFlavor == UHCI_VIA ||
+UhciExtension->HcFlavor == UHCI_VIA_x01 ||
+UhciExtension->HcFlavor == UHCI_VIA_x02 ||
+UhciExtension->HcFlavor == UHCI_VIA_x03 ||
 UhciExtension->HcFlavor == UHCI_VIA_x04)
 {
-DPRINT("UhciRHPortResetComplete: Via chip. FIXME\n");
+DPRINT1("UhciRHPortResetComplete: Via chip. FIXME\n");
 DbgBreakPoint();
 return;
 }
@@ -266,10 +266,10 @@ UhciRHSetFeaturePortReset(IN PVOID uhciExtension,
 
 UhciExtension->ResetPortMask = ResetPortMask | PortBit;
 
-if (UhciExtension->HcFlavor == UHCI_VIA &&
-UhciExtension->HcFlavor == UHCI_VIA_x01 &&
-UhciExtension->HcFlavor == UHCI_VIA_x02 &&
-UhciExtension->HcFlavor == UHCI_VIA_x03 &&
+if (UhciExtension->HcFlavor == UHCI_VIA ||
+UhciExtension->HcFlavor == UHCI_VIA_x01 ||
+UhciExtension->HcFlavor == UHCI_VIA_x02 ||
+UhciExtension->HcFlavor == UHCI_VIA_x03 ||
 UhciExtension->HcFlavor == UHCI_VIA_x04)
 {
 DPRINT1("UhciRHSetFeaturePortReset: Via chip. FIXME\n");



[ros-diffs] [reactos] 04/06: [USBEHCI] Avoid uninitialized return status in EHCI_ReopenEndpoint.

2021-10-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=555eec03061a28858af8e4e0909f063a1f8940ec

commit 555eec03061a28858af8e4e0909f063a1f8940ec
Author: Thomas Faber 
AuthorDate: Sat Oct 9 16:01:06 2021 -0400
Commit: Thomas Faber 
CommitDate: Wed Oct 27 19:27:33 2021 -0400

[USBEHCI] Avoid uninitialized return status in EHCI_ReopenEndpoint.

Powered by clang-cl.
---
 drivers/usb/usbehci/usbehci.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/usbehci/usbehci.c b/drivers/usb/usbehci/usbehci.c
index bdfd889ff1f..d7ce4aae37a 100644
--- a/drivers/usb/usbehci/usbehci.c
+++ b/drivers/usb/usbehci/usbehci.c
@@ -603,6 +603,7 @@ EHCI_ReopenEndpoint(IN PVOID ehciExtension,
 
 QH->sqh.HwQH.EndpointCaps.HubAddr = EndpointProperties->HubAddr;
 
+MPStatus = MP_STATUS_SUCCESS;
 break;
 
 default:



[ros-diffs] [reactos] 03/06: [USBPORT] Don't use NTAPI for variadic function.

2021-10-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e7574ee5e8b92d969ed7db5a9fc50c81a63b28e3

commit e7574ee5e8b92d969ed7db5a9fc50c81a63b28e3
Author: Thomas Faber 
AuthorDate: Sat Oct 9 16:00:24 2021 -0400
Commit: Thomas Faber 
CommitDate: Wed Oct 27 19:27:33 2021 -0400

[USBPORT] Don't use NTAPI for variadic function.

Powered by clang-cl.
---
 drivers/usb/usbport/debug.c| 1 -
 drivers/usb/usbport/usbport.h  | 1 -
 sdk/include/reactos/drivers/usbport/usbmport.h | 2 +-
 3 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/usb/usbport/debug.c b/drivers/usb/usbport/debug.c
index 1d2662d5e33..4e04bfabcd7 100644
--- a/drivers/usb/usbport/debug.c
+++ b/drivers/usb/usbport/debug.c
@@ -16,7 +16,6 @@
 #include "usbdebug.h"
 
 ULONG
-NTAPI
 USBPORT_DbgPrint(IN PVOID MiniPortExtension,
  IN ULONG Level,
  IN PCH Format,
diff --git a/drivers/usb/usbport/usbport.h b/drivers/usb/usbport/usbport.h
index 286ea9d5c82..04936bfe304 100644
--- a/drivers/usb/usbport/usbport.h
+++ b/drivers/usb/usbport/usbport.h
@@ -744,7 +744,6 @@ USBPORT_DoneTransfer(
 
 /* debug.c */
 ULONG
-NTAPI
 USBPORT_DbgPrint(
   IN PVOID MiniPortExtension,
   IN ULONG Level,
diff --git a/sdk/include/reactos/drivers/usbport/usbmport.h 
b/sdk/include/reactos/drivers/usbport/usbmport.h
index bdb0dd9ccac..60cc85cc474 100644
--- a/sdk/include/reactos/drivers/usbport/usbmport.h
+++ b/sdk/include/reactos/drivers/usbport/usbmport.h
@@ -396,7 +396,7 @@ typedef MPSTATUS
 
 /* Port functions */
 typedef ULONG
-(NTAPI *PUSBPORT_DBG_PRINT)(
+(*PUSBPORT_DBG_PRINT)(
   PVOID,
   ULONG,
   PCH,



[ros-diffs] [reactos] 02/06: [SACDRV] Fix uninitialized variable usage.

2021-10-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=4be3bc682dbffb845318b868eb3f9de1d8ece1c5

commit 4be3bc682dbffb845318b868eb3f9de1d8ece1c5
Author: Thomas Faber 
AuthorDate: Sat Oct 9 15:59:58 2021 -0400
Commit: Thomas Faber 
CommitDate: Wed Oct 27 19:27:32 2021 -0400

[SACDRV] Fix uninitialized variable usage.

Powered by clang-cl.
---
 drivers/sac/driver/data.c   | 41 ++---
 drivers/sac/driver/sacdrv.h |  1 +
 2 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/drivers/sac/driver/data.c b/drivers/sac/driver/data.c
index d7f1ae09d09..face230f688 100644
--- a/drivers/sac/driver/data.c
+++ b/drivers/sac/driver/data.c
@@ -153,27 +153,29 @@ FreeDeviceData(IN PDEVICE_OBJECT DeviceObject)
 
 /* Get the device extension and see how far we had gotten */
 DeviceExtension = (PSAC_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-if ((GlobalDataInitialized) && (DeviceExtension->Initialized))
+if (!(GlobalDataInitialized) || !(DeviceExtension->Initialized))
 {
-/* Attempt to rundown while holding the lock */
+goto Exit;
+}
+
+/* Attempt to rundown while holding the lock */
+KeAcquireSpinLock(&DeviceExtension->Lock, &OldIrql);
+while (DeviceExtension->RundownInProgress)
+{
+SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC FreeDeviceData: Waiting\n");
+
+/* Initiate and wait for rundown */
+KeInitializeEvent(&DeviceExtension->RundownEvent, 
SynchronizationEvent, 0);
+KeReleaseSpinLock(&DeviceExtension->Lock, OldIrql);
+Status = KeWaitForSingleObject(&DeviceExtension->RundownEvent,
+   Executive,
+   KernelMode,
+   FALSE,
+   NULL);
+ASSERT(Status == STATUS_SUCCESS);
+
+/* Re-acquire the lock and check if rundown is done */
 KeAcquireSpinLock(&DeviceExtension->Lock, &OldIrql);
-while (DeviceExtension->RundownInProgress)
-{
-SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC FreeDeviceData: Waiting\n");
-
-/* Initiate and wait for rundown */
-KeInitializeEvent(&DeviceExtension->RundownEvent, 
SynchronizationEvent, 0);
-KeReleaseSpinLock(&DeviceExtension->Lock, OldIrql);
-Status = KeWaitForSingleObject(&DeviceExtension->RundownEvent,
-   Executive,
-   KernelMode,
-   FALSE,
-   NULL);
-ASSERT(Status == STATUS_SUCCESS);
-
-/* Re-acquire the lock and check if rundown is done */
-KeAcquireSpinLock(&DeviceExtension->Lock, &OldIrql);
-}
 }
 
 /* Now set the rundown flag while we cancel the timer */
@@ -205,6 +207,7 @@ FreeDeviceData(IN PDEVICE_OBJECT DeviceObject)
 KeAcquireSpinLock(&DeviceExtension->Lock, &OldIrql);
 DeviceExtension->Initialized = FALSE;
 KeReleaseSpinLock(&DeviceExtension->Lock, OldIrql);
+Exit:
 SAC_DBG(SAC_DBG_ENTRY_EXIT, "SAC FreeDeviceData: Exiting.\n");
 }
 
diff --git a/drivers/sac/driver/sacdrv.h b/drivers/sac/driver/sacdrv.h
index 0280b6c9d1c..9c44671985f 100644
--- a/drivers/sac/driver/sacdrv.h
+++ b/drivers/sac/driver/sacdrv.h
@@ -74,6 +74,7 @@
 {   \
 if (!VerifyEventWaitable(Attributes->x, &Object, &WaitObject))  \
 {   \
+Status = STATUS_INVALID_HANDLE; \
 goto FailChannel;   \
 }   \
 Channel->x = Attributes->x; \



[ros-diffs] [reactos] 01/06: [NDIS] Allow timer initialization at DISPATCH_LEVEL.

2021-10-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=4eb45209ea9782abf5e2c766d696ad9a75b5d076

commit 4eb45209ea9782abf5e2c766d696ad9a75b5d076
Author: Thomas Faber 
AuthorDate: Sat Oct 9 13:47:26 2021 -0400
Commit: Thomas Faber 
CommitDate: Wed Oct 27 19:27:27 2021 -0400

[NDIS] Allow timer initialization at DISPATCH_LEVEL.

Spotted by Mortal Wombat.
---
 drivers/network/ndis/ndis/time.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/network/ndis/ndis/time.c b/drivers/network/ndis/ndis/time.c
index a35ea90107a..5234447da4c 100644
--- a/drivers/network/ndis/ndis/time.c
+++ b/drivers/network/ndis/ndis/time.c
@@ -80,10 +80,10 @@ NdisInitializeTimer(
  * FunctionContext: context (param 2) to be passed to the timer function 
when it runs
  * NOTES:
  * - TimerFunction will be called at DISPATCH_LEVEL
- * - call at IRQL = PASSIVE_LEVEL
+ * - Must be called at IRQL <= DISPATCH_LEVEL
  */
 {
-  PAGED_CODE();
+  ASSERT_IRQL(DISPATCH_LEVEL);
   ASSERT(Timer);
 
   KeInitializeTimer (&Timer->Timer);
@@ -203,10 +203,10 @@ NdisMInitializeTimer(
  * FunctionContext: argument passed to TimerFunction when it is called
  * NOTES:
  * - TimerFunction is called at IRQL = DISPATCH_LEVEL
- * - call at IRQL = PASSIVE_LEVEL
+ * - Must be called at IRQL <= DISPATCH_LEVEL
  */
 {
-  PAGED_CODE();
+  ASSERT_IRQL(DISPATCH_LEVEL);
   ASSERT(Timer);
 
   KeInitializeTimer (&Timer->Timer);



[ros-diffs] [reactos] 01/01: [RICHED20_WINETEST] Restore Wine sync in txtsrv.c. ROSTESTS-355

2021-10-09 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5a9535e694b6baaa4b028523263a39357d6d589b

commit 5a9535e694b6baaa4b028523263a39357d6d589b
Author: Thomas Faber 
AuthorDate: Sat Oct 9 20:18:43 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Oct 9 20:44:26 2021 -0400

[RICHED20_WINETEST] Restore Wine sync in txtsrv.c. ROSTESTS-355

In particular, add the missed diff in ITextHostImpl_TxGetCharFormat.
---
 modules/rostests/winetests/riched20/txtsrv.c | 139 ++-
 1 file changed, 52 insertions(+), 87 deletions(-)

diff --git a/modules/rostests/winetests/riched20/txtsrv.c 
b/modules/rostests/winetests/riched20/txtsrv.c
index 5a59c871815..0ef617b18d2 100644
--- a/modules/rostests/winetests/riched20/txtsrv.c
+++ b/modules/rostests/winetests/riched20/txtsrv.c
@@ -129,24 +129,25 @@ static ULONG WINAPI ITextHostImpl_Release(ITextHost 
*iface)
 }
 }
 
-static HDC WINAPI ITextHostImpl_TxGetDC(ITextHost *iface)
+#ifdef __REACTOS__
+#define __thiscall WINAPI
+#endif /* __REACTOS__ */
+
+static HDC __thiscall ITextHostImpl_TxGetDC(ITextHost *iface)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxGetDC(%p)\n", This);
 return NULL;
 }
 
-static INT WINAPI ITextHostImpl_TxReleaseDC(ITextHost *iface,
-HDC hdc)
+static INT __thiscall ITextHostImpl_TxReleaseDC(ITextHost *iface, HDC hdc)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxReleaseDC(%p)\n", This);
 return 0;
 }
 
-static BOOL WINAPI ITextHostImpl_TxShowScrollBar(ITextHost *iface,
- INT fnBar,
- BOOL fShow)
+static BOOL __thiscall ITextHostImpl_TxShowScrollBar(ITextHost *iface, INT 
fnBar, BOOL fShow)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxShowScrollBar(%p, fnBar=%d, fShow=%d)\n",
@@ -154,9 +155,7 @@ static BOOL WINAPI ITextHostImpl_TxShowScrollBar(ITextHost 
*iface,
 return FALSE;
 }
 
-static BOOL WINAPI ITextHostImpl_TxEnableScrollBar(ITextHost *iface,
-   INT fuSBFlags,
-   INT fuArrowflags)
+static BOOL __thiscall ITextHostImpl_TxEnableScrollBar(ITextHost *iface, INT 
fuSBFlags, INT fuArrowflags)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxEnableScrollBar(%p, fuSBFlags=%d, fuArrowflags=%d)\n",
@@ -164,11 +163,8 @@ static BOOL WINAPI 
ITextHostImpl_TxEnableScrollBar(ITextHost *iface,
 return FALSE;
 }
 
-static BOOL WINAPI ITextHostImpl_TxSetScrollRange(ITextHost *iface,
-  INT fnBar,
-  LONG nMinPos,
-  INT nMaxPos,
-  BOOL fRedraw)
+static BOOL __thiscall ITextHostImpl_TxSetScrollRange(ITextHost *iface, INT 
fnBar, LONG nMinPos,
+  INT nMaxPos, BOOL 
fRedraw)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxSetScrollRange(%p, fnBar=%d, nMinPos=%d, nMaxPos=%d, 
fRedraw=%d)\n",
@@ -176,10 +172,7 @@ static BOOL WINAPI 
ITextHostImpl_TxSetScrollRange(ITextHost *iface,
 return FALSE;
 }
 
-static BOOL WINAPI ITextHostImpl_TxSetScrollPos(ITextHost *iface,
-INT fnBar,
-INT nPos,
-BOOL fRedraw)
+static BOOL __thiscall ITextHostImpl_TxSetScrollPos(ITextHost *iface, INT 
fnBar, INT nPos, BOOL fRedraw)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxSetScrollPos(%p, fnBar=%d, nPos=%d, fRedraw=%d)\n",
@@ -187,25 +180,21 @@ static BOOL WINAPI ITextHostImpl_TxSetScrollPos(ITextHost 
*iface,
 return FALSE;
 }
 
-static void WINAPI ITextHostImpl_TxInvalidateRect(ITextHost *iface,
-  LPCRECT prc,
-  BOOL fMode)
+static void __thiscall ITextHostImpl_TxInvalidateRect(ITextHost *iface, 
LPCRECT prc, BOOL fMode)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxInvalidateRect(%p, prc=%p, fMode=%d)\n",
This, prc, fMode);
 }
 
-static void WINAPI ITextHostImpl_TxViewChange(ITextHost *iface, BOOL fUpdate)
+static void __thiscall ITextHostImpl_TxViewChange(ITextHost *iface, BOOL 
fUpdate)
 {
 ITextHostTestImpl *This = impl_from_ITextHost(iface);
 TRACECALL("Call to TxViewChange(%p, fUpdate=%d)\n",
This, fUpdate);
 }
 
-static BOOL WINAPI ITextHostImpl_TxCreateCare

[ros-diffs] [reactos] 05/05: [MBEDTLS] Update to version 2.16.11. CORE-17326

2021-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=103a79ce4fac2d4b657c0a22f3fea27d8b0b3a4e

commit 103a79ce4fac2d4b657c0a22f3fea27d8b0b3a4e
Author: Thomas Faber 
AuthorDate: Sat Sep 11 20:15:13 2021 -0400
Commit: Thomas Faber 
CommitDate: Sun Sep 12 10:49:55 2021 -0400

[MBEDTLS] Update to version 2.16.11. CORE-17326
---
 dll/3rdparty/mbedtls/aria.c   |  11 +-
 dll/3rdparty/mbedtls/bignum.c | 280 +--
 dll/3rdparty/mbedtls/camellia.c   |  20 +-
 dll/3rdparty/mbedtls/debug.c  |  70 ++-
 dll/3rdparty/mbedtls/dhm.c| 165 +++
 dll/3rdparty/mbedtls/ecp.c| 151 +-
 dll/3rdparty/mbedtls/ecp_curves.c | 667 +-
 dll/3rdparty/mbedtls/entropy.c|  18 +-
 dll/3rdparty/mbedtls/net_sockets.c|  63 ++-
 dll/3rdparty/mbedtls/nist_kw.c|   8 +-
 dll/3rdparty/mbedtls/pk.c |   5 +-
 dll/3rdparty/mbedtls/pkparse.c|   2 +-
 dll/3rdparty/mbedtls/ssl_ciphersuites.c   |   4 +-
 dll/3rdparty/mbedtls/ssl_cli.c|  18 +-
 dll/3rdparty/mbedtls/ssl_tls.c|  28 +-
 dll/3rdparty/mbedtls/x509_crt.c   |   5 +-
 media/doc/3rd Party Files.txt |   2 +-
 sdk/include/reactos/libs/mbedtls/aria.h   |   8 +-
 sdk/include/reactos/libs/mbedtls/bn_mul.h |  40 ++
 sdk/include/reactos/libs/mbedtls/config.h |   2 +-
 sdk/include/reactos/libs/mbedtls/ecp.h|  42 +-
 sdk/include/reactos/libs/mbedtls/padlock.h|   2 +-
 sdk/include/reactos/libs/mbedtls/ssl.h|   6 +-
 sdk/include/reactos/libs/mbedtls/ssl_ticket.h |   2 +-
 sdk/include/reactos/libs/mbedtls/version.h|   8 +-
 sdk/include/reactos/libs/mbedtls/x509_crt.h   |  11 +-
 26 files changed, 1035 insertions(+), 603 deletions(-)

diff --git a/dll/3rdparty/mbedtls/aria.c b/dll/3rdparty/mbedtls/aria.c
index ef0392f6589..50ccb91c702 100644
--- a/dll/3rdparty/mbedtls/aria.c
+++ b/dll/3rdparty/mbedtls/aria.c
@@ -952,7 +952,7 @@ static const uint8_t aria_test2_ctr_ct[3][48] = // 
CTR ciphertext
 {   \
 if( verbose )   \
 mbedtls_printf( "failed\n" );   \
-return( 1 );\
+goto exit;  \
 } else {\
 if( verbose )   \
 mbedtls_printf( "passed\n" );   \
@@ -966,6 +966,7 @@ int mbedtls_aria_self_test( int verbose )
 int i;
 uint8_t blk[MBEDTLS_ARIA_BLOCKSIZE];
 mbedtls_aria_context ctx;
+int ret = 1;
 
 #if (defined(MBEDTLS_CIPHER_MODE_CFB) || defined(MBEDTLS_CIPHER_MODE_CTR))
 size_t j;
@@ -977,6 +978,8 @@ int mbedtls_aria_self_test( int verbose )
 uint8_t buf[48], iv[MBEDTLS_ARIA_BLOCKSIZE];
 #endif
 
+mbedtls_aria_init( &ctx );
+
 /*
  * Test set 1
  */
@@ -1096,7 +1099,11 @@ int mbedtls_aria_self_test( int verbose )
 mbedtls_printf( "\n" );
 #endif /* MBEDTLS_CIPHER_MODE_CTR */
 
-return( 0 );
+ret = 0;
+
+exit:
+mbedtls_aria_free( &ctx );
+return( ret );
 }
 
 #endif /* MBEDTLS_SELF_TEST */
diff --git a/dll/3rdparty/mbedtls/bignum.c b/dll/3rdparty/mbedtls/bignum.c
index f133f6c13c2..540f7523b59 100644
--- a/dll/3rdparty/mbedtls/bignum.c
+++ b/dll/3rdparty/mbedtls/bignum.c
@@ -267,6 +267,36 @@ void mbedtls_mpi_swap( mbedtls_mpi *X, mbedtls_mpi *Y )
 memcpy(  Y, &T, sizeof( mbedtls_mpi ) );
 }
 
+/**
+ * Select between two sign values in constant-time.
+ *
+ * This is functionally equivalent to second ? a : b but uses only bit
+ * operations in order to avoid branches.
+ *
+ * \param[in] a The first sign; must be either +1 or -1.
+ * \param[in] b The second sign; must be either +1 or -1.
+ * \param[in] secondMust be either 1 (return b) or 0 (return a).
+ *
+ * \return The selected sign value.
+ */
+static int mpi_safe_cond_select_sign( int a, int b, unsigned char second )
+{
+/* In order to avoid questions about what we can reasonnably assume about
+ * the representations of signed integers, move everything to unsigned
+ * by taking advantage of the fact that a and b are either +1 or -1. */
+unsigned ua = a + 1;
+unsigned ub = b + 1;
+
+/* second was 0 or 1, mask is 0 or 2 as are ua and ub */
+const unsigned mask = second << 1;
+
+/* select ua or ub */
+unsigned ur = ( ua & ~mask ) | ( ub & mask );
+
+/* ur is now 0 or 2, convert back to -1 or +1 */
+return( (int) ur - 1 );
+}
+
 /*
  * Conditionally assign dest = src, without leaking information
  * about whether the assignment was made or not.
@@ -279,8 +309,23 @@ static void mpi_safe_cond_assign( size_t n,
   unsigned char assign )
 {
 size_t i;
+
+/* MSVC h

[ros-diffs] [reactos] 03/05: [MBEDTLS] Update to version 2.7.19. CORE-17252

2021-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a01a8faa603f347cab19dfc0c4ae4df1fe99bd28

commit a01a8faa603f347cab19dfc0c4ae4df1fe99bd28
Author: Thomas Faber 
AuthorDate: Sat Sep 11 20:10:19 2021 -0400
Commit: Thomas Faber 
CommitDate: Sun Sep 12 10:49:55 2021 -0400

[MBEDTLS] Update to version 2.7.19. CORE-17252
---
 dll/3rdparty/mbedtls/base64.c  | 131 ++---
 dll/3rdparty/mbedtls/bignum.c  |   6 ++
 dll/3rdparty/mbedtls/ctr_drbg.c|  16 +--
 dll/3rdparty/mbedtls/entropy.c |   7 +-
 dll/3rdparty/mbedtls/hmac_drbg.c   |  20 ++--
 dll/3rdparty/mbedtls/net_sockets.c |   7 ++
 dll/3rdparty/mbedtls/pkwrite.c |  22 ++---
 dll/3rdparty/mbedtls/rsa.c |  31 +++---
 dll/3rdparty/mbedtls/threading.c   |   6 ++
 dll/3rdparty/mbedtls/version_features.c|   3 +
 media/doc/3rd Party Files.txt  |   2 +-
 sdk/include/reactos/libs/mbedtls/config.h  |  17 
 sdk/include/reactos/libs/mbedtls/ctr_drbg.h|  50 +-
 sdk/include/reactos/libs/mbedtls/entropy.h |   6 +-
 sdk/include/reactos/libs/mbedtls/hmac_drbg.h   |  63 +++-
 sdk/include/reactos/libs/mbedtls/net_sockets.h |  14 ++-
 sdk/include/reactos/libs/mbedtls/rsa.h |   6 +-
 sdk/include/reactos/libs/mbedtls/threading.h   |   3 +
 sdk/include/reactos/libs/mbedtls/version.h |   8 +-
 19 files changed, 352 insertions(+), 66 deletions(-)

diff --git a/dll/3rdparty/mbedtls/base64.c b/dll/3rdparty/mbedtls/base64.c
index bfafb05353c..692e11e3fae 100644
--- a/dll/3rdparty/mbedtls/base64.c
+++ b/dll/3rdparty/mbedtls/base64.c
@@ -96,6 +96,99 @@ static const unsigned char base64_dec_map[128] =
 
 #define BASE64_SIZE_T_MAX   ( (size_t) -1 ) /* SIZE_T_MAX is not standard */
 
+/*
+ * Constant flow conditional assignment to unsigned char
+ */
+static void mbedtls_base64_cond_assign_uchar( unsigned char * dest, const 
unsigned char * const src,
+   unsigned char condition )
+{
+/* MSVC has a warning about unary minus on unsigned integer types,
+ * but this is well-defined and precisely what we want to do here. */
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4146 )
+#endif
+
+/* Generate bitmask from condition, mask will either be 0xFF or 0 */
+unsigned char mask = ( condition | -condition );
+mask >>= 7;
+mask = -mask;
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+*dest = ( ( *src ) & mask ) | ( ( *dest ) & ~mask );
+}
+
+/*
+ * Constant flow conditional assignment to uint_32
+ */
+static void mbedtls_base64_cond_assign_uint32( uint32_t * dest, const uint32_t 
src,
+   uint32_t condition )
+{
+/* MSVC has a warning about unary minus on unsigned integer types,
+ * but this is well-defined and precisely what we want to do here. */
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4146 )
+#endif
+
+/* Generate bitmask from condition, mask will either be 0x or 0 */
+uint32_t mask = ( condition | -condition );
+mask >>= 31;
+mask = -mask;
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+*dest = ( src & mask ) | ( ( *dest ) & ~mask );
+}
+
+/*
+ * Constant flow check for equality
+ */
+static unsigned char mbedtls_base64_eq( size_t in_a, size_t in_b )
+{
+size_t difference = in_a ^ in_b;
+
+/* MSVC has a warning about unary minus on unsigned integer types,
+ * but this is well-defined and precisely what we want to do here. */
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4146 )
+#endif
+
+difference |= -difference;
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+/* cope with the varying size of size_t per platform */
+difference >>= ( sizeof( difference ) * 8 - 1 );
+
+return (unsigned char) ( 1 ^ difference );
+}
+
+/*
+ * Constant flow lookup into table.
+ */
+static unsigned char mbedtls_base64_table_lookup( const unsigned char * const 
table,
+ const size_t table_size, 
const size_t table_index )
+{
+size_t i;
+unsigned char result = 0;
+
+for( i = 0; i < table_size; ++i )
+{
+mbedtls_base64_cond_assign_uchar( &result, &table[i], 
mbedtls_base64_eq( i, table_index ) );
+}
+
+return result;
+}
+
 /*
  * Encode a buffer into base64 format
  */
@@ -136,10 +229,17 @@ int mbedtls_base64_encode( unsigned char *dst, size_t 
dlen, size_t *olen,
 C2 = *src++;
 C3 = *src++;
 
-*p++ = base64_enc_map[(C1 >> 2) & 0x3F];
-*p++ = base64_enc_map[(((C1 &  3) << 4) + (C2 >> 4)) & 0x3F];
-*p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F];
-*p++ =

[ros-diffs] [reactos] 02/05: [MBEDTLS] Update to version 2.7.18. CORE-17252

2021-09-12 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2e53fc8edb74f40015094a426497dd9569d0b24b

commit 2e53fc8edb74f40015094a426497dd9569d0b24b
Author: Thomas Faber 
AuthorDate: Sat Sep 11 19:54:15 2021 -0400
Commit: Thomas Faber 
CommitDate: Sun Sep 12 10:49:54 2021 -0400

[MBEDTLS] Update to version 2.7.18. CORE-17252
---
 dll/3rdparty/mbedtls/aes.c   | 190 ++
 dll/3rdparty/mbedtls/bignum.c|  11 +-
 dll/3rdparty/mbedtls/cipher_wrap.c   |  14 +-
 dll/3rdparty/mbedtls/cmac.c  |   2 +-
 dll/3rdparty/mbedtls/ctr_drbg.c  |  11 +-
 dll/3rdparty/mbedtls/ecp_curves.c|   2 +-
 dll/3rdparty/mbedtls/error.c |  15 +-
 dll/3rdparty/mbedtls/hmac_drbg.c |  11 +-
 dll/3rdparty/mbedtls/md2.c   |   3 +
 dll/3rdparty/mbedtls/md4.c   | 154 +-
 dll/3rdparty/mbedtls/md5.c   | 188 +++---
 dll/3rdparty/mbedtls/pem.c   |   3 +
 dll/3rdparty/mbedtls/pkcs5.c |  28 ++--
 dll/3rdparty/mbedtls/pkparse.c   |   2 +-
 dll/3rdparty/mbedtls/ripemd160.c | 228 +-
 dll/3rdparty/mbedtls/rsa.c   |  13 +-
 dll/3rdparty/mbedtls/sha1.c  | 230 ++-
 dll/3rdparty/mbedtls/sha256.c|  95 +++
 dll/3rdparty/mbedtls/sha512.c|  82 ++
 dll/3rdparty/mbedtls/ssl_srv.c   |   6 +
 dll/3rdparty/mbedtls/ssl_tls.c   |  21 ++-
 dll/3rdparty/mbedtls/x509_crt.c  |   1 +
 media/doc/3rd Party Files.txt|   2 +-
 sdk/include/reactos/libs/mbedtls/bignum.h|   4 +-
 sdk/include/reactos/libs/mbedtls/config.h|   2 +-
 sdk/include/reactos/libs/mbedtls/ctr_drbg.h  |   8 +-
 sdk/include/reactos/libs/mbedtls/hmac_drbg.h |   7 +-
 sdk/include/reactos/libs/mbedtls/sha512.h|   4 +-
 sdk/include/reactos/libs/mbedtls/ssl.h   |   2 +-
 sdk/include/reactos/libs/mbedtls/version.h   |   8 +-
 30 files changed, 730 insertions(+), 617 deletions(-)

diff --git a/dll/3rdparty/mbedtls/aes.c b/dll/3rdparty/mbedtls/aes.c
index e0c7a11c38e..b8aee9077b7 100644
--- a/dll/3rdparty/mbedtls/aes.c
+++ b/dll/3rdparty/mbedtls/aes.c
@@ -740,63 +740,56 @@ int mbedtls_internal_aes_encrypt( mbedtls_aes_context 
*ctx,
   unsigned char output[16] )
 {
 int i;
-uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
-
-RK = ctx->rk;
+uint32_t *RK = ctx->rk;
+struct
+{
+uint32_t X[4];
+uint32_t Y[4];
+} t;
 
-GET_UINT32_LE( X0, input,  0 ); X0 ^= *RK++;
-GET_UINT32_LE( X1, input,  4 ); X1 ^= *RK++;
-GET_UINT32_LE( X2, input,  8 ); X2 ^= *RK++;
-GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++;
+GET_UINT32_LE( t.X[0], input,  0 ); t.X[0] ^= *RK++;
+GET_UINT32_LE( t.X[1], input,  4 ); t.X[1] ^= *RK++;
+GET_UINT32_LE( t.X[2], input,  8 ); t.X[2] ^= *RK++;
+GET_UINT32_LE( t.X[3], input, 12 ); t.X[3] ^= *RK++;
 
 for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- )
 {
-AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 );
-AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 );
+AES_FROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], 
t.X[3] );
+AES_FROUND( t.X[0], t.X[1], t.X[2], t.X[3], t.Y[0], t.Y[1], t.Y[2], 
t.Y[3] );
 }
 
-AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 );
-
-X0 = *RK++ ^ \
-( (uint32_t) FSb[ ( Y0   ) & 0xFF ]   ) ^
-( (uint32_t) FSb[ ( Y1 >>  8 ) & 0xFF ] <<  8 ) ^
-( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^
-( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 );
-
-X1 = *RK++ ^ \
-( (uint32_t) FSb[ ( Y1   ) & 0xFF ]   ) ^
-( (uint32_t) FSb[ ( Y2 >>  8 ) & 0xFF ] <<  8 ) ^
-( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^
-( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 );
-
-X2 = *RK++ ^ \
-( (uint32_t) FSb[ ( Y2   ) & 0xFF ]   ) ^
-( (uint32_t) FSb[ ( Y3 >>  8 ) & 0xFF ] <<  8 ) ^
-( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^
-( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 );
-
-X3 = *RK++ ^ \
-( (uint32_t) FSb[ ( Y3   ) & 0xFF ]   ) ^
-( (uint32_t) FSb[ ( Y0 >>  8 ) & 0xFF ] <<  8 ) ^
-( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^
-( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 );
-
-PUT_UINT32_LE( X0, output,  0 );
-PUT_UINT32_LE( X1, output,  4 );
-PUT_UINT32_LE( X2, output,  8 );
-PUT_UINT32_LE( X3, o

[ros-diffs] [reactos] 04/04: [ACPICA] Update to version 20210730. CORE-17760

2021-09-11 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0a656b574eae4e961281cebf4d795f3fe3cb5d74

commit 0a656b574eae4e961281cebf4d795f3fe3cb5d74
Author: Thomas Faber 
AuthorDate: Fri Sep 10 22:19:51 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Sep 11 10:48:30 2021 -0400

[ACPICA] Update to version 20210730. CORE-17760
---
 drivers/bus/acpi/acpica/dispatcher/dswexec.c |   2 +-
 drivers/bus/acpi/acpica/include/acdisasm.h   |  22 +++
 drivers/bus/acpi/acpica/include/acnames.h|   1 +
 drivers/bus/acpi/acpica/include/acoutput.h   |   2 +-
 drivers/bus/acpi/acpica/include/acpixf.h |   2 +-
 drivers/bus/acpi/acpica/include/actbinfo.h   |  15 +++
 drivers/bus/acpi/acpica/include/actbl1.h |  16 ++-
 drivers/bus/acpi/acpica/include/actbl2.h | 194 +++
 drivers/bus/acpi/acpica/include/actbl3.h |   6 +
 media/doc/3rd Party Files.txt|   2 +-
 10 files changed, 257 insertions(+), 5 deletions(-)

diff --git a/drivers/bus/acpi/acpica/dispatcher/dswexec.c 
b/drivers/bus/acpi/acpica/dispatcher/dswexec.c
index 4e02f9d3639..f87fdece142 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dswexec.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dswexec.c
@@ -629,7 +629,7 @@ AcpiDsExecEndOp (
 if (ACPI_SUCCESS (Status))
 {
 Status = AcpiExWriteDataToField (ObjDesc, 
Op->Common.Node->Object, NULL);
-if ACPI_FAILURE (Status)
+if (ACPI_FAILURE (Status))
 {
 ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer 
field"));
 }
diff --git a/drivers/bus/acpi/acpica/include/acdisasm.h 
b/drivers/bus/acpi/acpica/include/acdisasm.h
index 836562323b3..a27e667ed33 100644
--- a/drivers/bus/acpi/acpica/include/acdisasm.h
+++ b/drivers/bus/acpi/acpica/include/acdisasm.h
@@ -142,6 +142,12 @@ typedef enum
 
 /* Types that are specific to particular ACPI tables */
 
+ACPI_DMT_AEST,
+ACPI_DMT_AEST_CACHE,
+ACPI_DMT_AEST_GIC,
+ACPI_DMT_AEST_RES,
+ACPI_DMT_AEST_XFACE,
+ACPI_DMT_AEST_XRUPT,
 ACPI_DMT_ASF,
 ACPI_DMT_CEDT,
 ACPI_DMT_DMAR,
@@ -175,6 +181,7 @@ typedef enum
 ACPI_DMT_SRAT,
 ACPI_DMT_TPM2,
 ACPI_DMT_VIOT,
+ACPI_DMT_WPBT_UNICODE,
 
 /* Special opcodes */
 
@@ -252,6 +259,17 @@ extern const char   *AcpiGbl_AccessTypes[];
 extern const char   *AcpiGbl_UpdateRules[];
 extern const char   *AcpiGbl_MatchOps[];
 
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestHdr[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestProcError[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestCacheRsrc[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestTlbRsrc[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestGenRsrc[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestMemError[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestSmmuError[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestVendorError[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestGicError[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestXface[];
+extern ACPI_DMTABLE_INFOAcpiDmTableInfoAestXrupt[];
 extern ACPI_DMTABLE_INFOAcpiDmTableInfoAsf0[];
 extern ACPI_DMTABLE_INFOAcpiDmTableInfoAsf1[];
 extern ACPI_DMTABLE_INFOAcpiDmTableInfoAsf1a[];
@@ -573,6 +591,10 @@ AcpiDmDumpUnicode (
 UINT32  BufferOffset,
 UINT32  ByteLength);
 
+void
+AcpiDmDumpAest (
+ACPI_TABLE_HEADER   *Table);
+
 void
 AcpiDmDumpAsf (
 ACPI_TABLE_HEADER   *Table);
diff --git a/drivers/bus/acpi/acpica/include/acnames.h 
b/drivers/bus/acpi/acpica/include/acnames.h
index 1eb43359967..bd5f21b7e9d 100644
--- a/drivers/bus/acpi/acpica/include/acnames.h
+++ b/drivers/bus/acpi/acpica/include/acnames.h
@@ -54,6 +54,7 @@
 #define METHOD_NAME__CLS"_CLS"
 #define METHOD_NAME__CRS"_CRS"
 #define METHOD_NAME__DDN"_DDN"
+#define METHOD_NAME__DIS"_DIS"
 #define METHOD_NAME__DMA"_DMA"
 #define METHOD_NAME__HID"_HID"
 #define METHOD_NAME__INI"_INI"
diff --git a/drivers/bus/acpi/acpica/include/acoutput.h 
b/drivers/bus/acpi/acpica/include/acoutput.h
index bb204c0b3ec..5bc924388bd 100644
--- a/drivers/bus/acpi/acpica/include/acoutput.h
+++ b/drivers/bus/acpi/acpica/include/acoutput.h
@@ -453,7 +453,7 @@
 /* Conditional execution */
 
 #define ACPI_DEBUG_EXEC(a)  a
-#define ACPI_DEBUG_ONLY_MEMBERS(a)  a;
+#define ACPI_DEBUG_ONLY_MEMBERS(a)  a
 #define _VERBOSE_STRUCTURES
 
 
diff --git a/drivers/bus/acpi/acpica/include/acpixf.h 
b/drivers/bus/acpi/acpica/include/acpixf.h
index 5fe93ee8522..06571ffef89 100644
--- a/drivers/bus/acpi/acpica/include/acpixf.h
+++ b/drivers/bus/acpi/acpica/include/acpixf.h
@@ -46,7 +46,7 @@
 
 /* Current ACPICA subsystem version in MMDD fo

[ros-diffs] [reactos] 03/04: [ACPICA] Update to version 20210604. CORE-17760

2021-09-11 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3c2845607c1aa7f6777d8f281fbf4c2a7330bc02

commit 3c2845607c1aa7f6777d8f281fbf4c2a7330bc02
Author: Thomas Faber 
AuthorDate: Fri Sep 10 22:15:19 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Sep 11 10:48:30 2021 -0400

[ACPICA] Update to version 20210604. CORE-17760
---
 drivers/bus/acpi/acpica/executer/exfield.c|   6 +-
 drivers/bus/acpi/acpica/executer/exserial.c   |  12 ++
 drivers/bus/acpi/acpica/include/acbuffer.h|   9 ++
 drivers/bus/acpi/acpica/include/acconfig.h|   1 +
 drivers/bus/acpi/acpica/include/acdisasm.h|  37 +-
 drivers/bus/acpi/acpica/include/acpixf.h  |   2 +-
 drivers/bus/acpi/acpica/include/actbinfo.h|   9 ++
 drivers/bus/acpi/acpica/include/actbl1.h  |  43 ++-
 drivers/bus/acpi/acpica/include/actbl2.h  | 156 ++
 drivers/bus/acpi/acpica/include/acutils.h |   5 +
 drivers/bus/acpi/acpica/namespace/nsrepair2.c |   7 ++
 drivers/bus/acpi/acpica/utilities/utdelete.c  |   8 ++
 drivers/bus/acpi/acpica/utilities/utprint.c   |   2 +-
 drivers/bus/acpi/acpica/utilities/utuuid.c|  48 
 media/doc/3rd Party Files.txt |   2 +-
 15 files changed, 336 insertions(+), 11 deletions(-)

diff --git a/drivers/bus/acpi/acpica/executer/exfield.c 
b/drivers/bus/acpi/acpica/executer/exfield.c
index ceb7fd8d421..8129e222f77 100644
--- a/drivers/bus/acpi/acpica/executer/exfield.c
+++ b/drivers/bus/acpi/acpica/executer/exfield.c
@@ -187,7 +187,8 @@ AcpiExReadDataFromField (
 else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
 (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
  ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
- ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
+ ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
+ ObjDesc->Field.RegionObj->Region.SpaceId == 
ACPI_ADR_SPACE_PLATFORM_RT))
 {
 /* SMBus, GSBus, IPMI serial */
 
@@ -359,7 +360,8 @@ AcpiExWriteDataToField (
 else if ((ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REGION_FIELD) &&
 (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_SMBUS ||
  ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS ||
- ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI))
+ ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_IPMI  ||
+ ObjDesc->Field.RegionObj->Region.SpaceId == 
ACPI_ADR_SPACE_PLATFORM_RT))
 {
 /* SMBus, GSBus, IPMI serial */
 
diff --git a/drivers/bus/acpi/acpica/executer/exserial.c 
b/drivers/bus/acpi/acpica/executer/exserial.c
index 7746e8941df..1ffa0ba5fbf 100644
--- a/drivers/bus/acpi/acpica/executer/exserial.c
+++ b/drivers/bus/acpi/acpica/executer/exserial.c
@@ -245,6 +245,12 @@ AcpiExReadSerialBus (
 Function = ACPI_READ | (AccessorType << 16);
 break;
 
+case ACPI_ADR_SPACE_PLATFORM_RT:
+
+BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
+Function = ACPI_READ;
+break;
+
 default:
 return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
 }
@@ -364,6 +370,12 @@ AcpiExWriteSerialBus (
 Function = ACPI_WRITE | (AccessorType << 16);
 break;
 
+case ACPI_ADR_SPACE_PLATFORM_RT:
+
+BufferLength = ACPI_PRM_INPUT_BUFFER_SIZE;
+Function = ACPI_WRITE;
+break;
+
 default:
 return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
 }
diff --git a/drivers/bus/acpi/acpica/include/acbuffer.h 
b/drivers/bus/acpi/acpica/include/acbuffer.h
index 5d68946cbc9..05486f68c88 100644
--- a/drivers/bus/acpi/acpica/include/acbuffer.h
+++ b/drivers/bus/acpi/acpica/include/acbuffer.h
@@ -251,5 +251,14 @@ typedef struct acpi_pld_info
 #define ACPI_PLD_GET_HORIZ_OFFSET(dword)ACPI_GET_BITS (dword, 16, 
ACPI_16BIT_MASK)
 #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value)  ACPI_SET_BITS (dword, 16, 
ACPI_16BIT_MASK, value)   /* Offset 128+16=144, Len 16 */
 
+/* Panel position defined in _PLD section of ACPI Specification 6.3 */
+
+#define ACPI_PLD_PANEL_TOP  0
+#define ACPI_PLD_PANEL_BOTTOM   1
+#define ACPI_PLD_PANEL_LEFT 2
+#define ACPI_PLD_PANEL_RIGHT3
+#define ACPI_PLD_PANEL_FRONT4
+#define ACPI_PLD_PANEL_BACK 5
+#define ACPI_PLD_PANEL_UNKNOWN  6
 
 #endif /* ACBUFFER_H */
diff --git a/drivers/bus/acpi/acpica/include/acconfig.h 
b/drivers/bus/acpi/acpica/include/acconfig.h
index 4e3f6b60df0..612c24383d7 100644
--- a/drivers/bus/acpi/acpica/include/acconfig.h
+++ b/drivers/bus/acpi/acpica/include/acconfig.h
@@ -225,6 +225,7 @@
 #define ACPI_MAX_GSBUS_DATA_SIZE255
 #define ACPI_MAX_GSBUS_BUFFER_SIZE  ACPI_SERIAL_HEADER_SIZE + 
ACPI_MAX_GSBUS_DATA_SIZE
 
+#define ACPI_PRM_INPUT_BUFFER_SIZE  26
 
 /* _SxD and _SxW control methods */
 
diff --git a/

[ros-diffs] [reactos] 01/04: [ACPICA] Update to version 20210105. CORE-17760

2021-09-11 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=05926c7ac59b9c6c6cdbeaa173d18ed116ef0162

commit 05926c7ac59b9c6c6cdbeaa173d18ed116ef0162
Author: Thomas Faber 
AuthorDate: Fri Sep 10 21:59:41 2021 -0400
Commit: Thomas Faber 
CommitDate: Sat Sep 11 10:48:17 2021 -0400

[ACPICA] Update to version 20210105. CORE-17760
---
 drivers/bus/acpi/acpica/dispatcher/dsargs.c|  2 +-
 drivers/bus/acpi/acpica/dispatcher/dscontrol.c |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsdebug.c   |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsfield.c   |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsinit.c|  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsmethod.c  |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsmthdat.c  |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsobject.c  |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsopcode.c  |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dspkginit.c |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsutils.c   |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dswexec.c   |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dswload.c   |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dswload2.c  |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dswscope.c  |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dswstate.c  |  2 +-
 drivers/bus/acpi/acpica/events/evevent.c   |  2 +-
 drivers/bus/acpi/acpica/events/evglock.c   |  2 +-
 drivers/bus/acpi/acpica/events/evgpe.c |  2 +-
 drivers/bus/acpi/acpica/events/evgpeblk.c  |  2 +-
 drivers/bus/acpi/acpica/events/evgpeinit.c |  2 +-
 drivers/bus/acpi/acpica/events/evgpeutil.c |  2 +-
 drivers/bus/acpi/acpica/events/evhandler.c |  2 +-
 drivers/bus/acpi/acpica/events/evmisc.c|  2 +-
 drivers/bus/acpi/acpica/events/evregion.c  |  2 +-
 drivers/bus/acpi/acpica/events/evrgnini.c  |  2 +-
 drivers/bus/acpi/acpica/events/evsci.c |  2 +-
 drivers/bus/acpi/acpica/events/evxface.c   |  2 +-
 drivers/bus/acpi/acpica/events/evxfevnt.c  |  2 +-
 drivers/bus/acpi/acpica/events/evxfgpe.c   |  2 +-
 drivers/bus/acpi/acpica/events/evxfregn.c  |  2 +-
 drivers/bus/acpi/acpica/executer/exconcat.c|  2 +-
 drivers/bus/acpi/acpica/executer/exconfig.c|  2 +-
 drivers/bus/acpi/acpica/executer/exconvrt.c|  2 +-
 drivers/bus/acpi/acpica/executer/excreate.c|  2 +-
 drivers/bus/acpi/acpica/executer/exdebug.c |  2 +-
 drivers/bus/acpi/acpica/executer/exdump.c  |  2 +-
 drivers/bus/acpi/acpica/executer/exfield.c |  2 +-
 drivers/bus/acpi/acpica/executer/exfldio.c |  2 +-
 drivers/bus/acpi/acpica/executer/exmisc.c  |  2 +-
 drivers/bus/acpi/acpica/executer/exmutex.c |  2 +-
 drivers/bus/acpi/acpica/executer/exnames.c |  2 +-
 drivers/bus/acpi/acpica/executer/exoparg1.c|  2 +-
 drivers/bus/acpi/acpica/executer/exoparg2.c|  2 +-
 drivers/bus/acpi/acpica/executer/exoparg3.c|  2 +-
 drivers/bus/acpi/acpica/executer/exoparg6.c|  2 +-
 drivers/bus/acpi/acpica/executer/exprep.c  |  2 +-
 drivers/bus/acpi/acpica/executer/exregion.c|  2 +-
 drivers/bus/acpi/acpica/executer/exresnte.c|  2 +-
 drivers/bus/acpi/acpica/executer/exresolv.c|  2 +-
 drivers/bus/acpi/acpica/executer/exresop.c |  2 +-
 drivers/bus/acpi/acpica/executer/exserial.c|  2 +-
 drivers/bus/acpi/acpica/executer/exstore.c |  2 +-
 drivers/bus/acpi/acpica/executer/exstoren.c|  2 +-
 drivers/bus/acpi/acpica/executer/exstorob.c|  2 +-
 drivers/bus/acpi/acpica/executer/exsystem.c|  2 +-
 drivers/bus/acpi/acpica/executer/extrace.c |  2 +-
 drivers/bus/acpi/acpica/executer/exutils.c |  2 +-
 drivers/bus/acpi/acpica/hardware/hwacpi.c  |  2 +-
 drivers/bus/acpi/acpica/hardware/hwesleep.c|  2 +-
 drivers/bus/acpi/acpica/hardware/hwgpe.c   |  2 +-
 drivers/bus/acpi/acpica/hardware/hwpci.c   |  2 +-
 drivers/bus/acpi/acpica/hardware/hwregs.c  |  2 +-
 drivers/bus/acpi/acpica/hardware/hwsleep.c |  2 +-
 drivers/bus/acpi/acpica/hardware/hwtimer.c |  2 +-
 drivers/bus/acpi/acpica/hardware/hwvalid.c |  2 +-
 drivers/bus/acpi/acpica/hardware/hwxface.c |  2 +-
 drivers/bus/acpi/acpica/hardware/hwxfsleep.c   |  2 +-
 drivers/bus/acpi/acpica/include/acapps.h   |  4 +--
 drivers/bus/acpi/acpica/include/acbuffer.h |  2 +-
 drivers/bus/acpi/acpica/include/acclib.h   |  2 +-
 drivers/bus/acpi/acpica/include/accommon.h |  2 +-
 drivers/bus/acpi/acpica/include/acconfig.h |  2 +-
 drivers/bus/acpi/acpica/include/acconvert.h|  2 +-
 drivers/bus/acpi/acpica/include/acdebug.h  |  2 +-
 drivers/bus/acpi/acpica/include/acdisasm.h | 14 +-
 drivers/bus/acpi/acpica/include/acdispat.h |  2 +-
 drivers/bus/acpi/acpica

[ros-diffs] [reactos] 01/01: [ACPICA] Update to version 20201217. CORE-17410

2021-01-01 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9587fe1c36fbce0f963edf47276c0caf3066cd4b

commit 9587fe1c36fbce0f963edf47276c0caf3066cd4b
Author: Thomas Faber 
AuthorDate: Sun Dec 27 16:01:03 2020 +0100
Commit: Thomas Faber 
CommitDate: Fri Jan 1 16:20:53 2021 +0100

[ACPICA] Update to version 20201217. CORE-17410
---
 drivers/bus/acpi/acpica/dispatcher/dscontrol.c   |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dsdebug.c |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dswexec.c |  3 +--
 drivers/bus/acpi/acpica/dispatcher/dswload.c |  2 +-
 drivers/bus/acpi/acpica/dispatcher/dswload2.c|  2 +-
 drivers/bus/acpi/acpica/executer/exfldio.c   |  2 +-
 drivers/bus/acpi/acpica/executer/exresop.c   |  4 ++--
 drivers/bus/acpi/acpica/executer/exstore.c   |  4 ++--
 drivers/bus/acpi/acpica/hardware/hwgpe.c |  2 +-
 drivers/bus/acpi/acpica/include/acexcep.h| 10 +-
 drivers/bus/acpi/acpica/include/acpixf.h |  2 +-
 drivers/bus/acpi/acpica/include/actypes.h|  5 +
 drivers/bus/acpi/acpica/include/platform/acgcc.h | 15 +++
 drivers/bus/acpi/acpica/parser/psloop.c  |  3 +--
 drivers/bus/acpi/acpica/parser/psparse.c |  2 +-
 drivers/bus/acpi/acpica/utilities/utdelete.c |  2 +-
 drivers/bus/acpi/acpica/utilities/utstrsuppt.c   |  4 ++--
 media/doc/3rd Party Files.txt|  2 +-
 18 files changed, 43 insertions(+), 25 deletions(-)

diff --git a/drivers/bus/acpi/acpica/dispatcher/dscontrol.c 
b/drivers/bus/acpi/acpica/dispatcher/dscontrol.c
index fda3db6f294..9c04f2b389e 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dscontrol.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dscontrol.c
@@ -102,7 +102,7 @@ AcpiDsExecBeginControlOp (
 }
 }
 
-/*lint -fallthrough */
+ACPI_FALLTHROUGH;
 
 case AML_IF_OP:
 /*
diff --git a/drivers/bus/acpi/acpica/dispatcher/dsdebug.c 
b/drivers/bus/acpi/acpica/dispatcher/dsdebug.c
index e7110e6017a..951346a12c4 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dsdebug.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dsdebug.c
@@ -146,7 +146,7 @@ AcpiDsDumpMethodStack (
 
 /* Ignore control codes, they are not errors */
 
-if ((Status & AE_CODE_MASK) == AE_CODE_CONTROL)
+if (ACPI_CNTL_EXCEPTION (Status))
 {
 return_VOID;
 }
diff --git a/drivers/bus/acpi/acpica/dispatcher/dswexec.c 
b/drivers/bus/acpi/acpica/dispatcher/dswexec.c
index d9d79be2080..3057a9329d3 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dswexec.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dswexec.c
@@ -664,8 +664,7 @@ AcpiDsExecEndOp (
 break;
 }
 
-/* Fall through */
-/*lint -fallthrough */
+ACPI_FALLTHROUGH;
 
 case AML_INT_EVAL_SUBTREE_OP:
 
diff --git a/drivers/bus/acpi/acpica/dispatcher/dswload.c 
b/drivers/bus/acpi/acpica/dispatcher/dswload.c
index d3e11bc661e..62fd6e40481 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dswload.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dswload.c
@@ -267,7 +267,7 @@ AcpiDsLoad1BeginOp (
 break;
 }
 
-/*lint -fallthrough */
+ACPI_FALLTHROUGH;
 
 default:
 
diff --git a/drivers/bus/acpi/acpica/dispatcher/dswload2.c 
b/drivers/bus/acpi/acpica/dispatcher/dswload2.c
index a916eec7fd9..4e69244de27 100644
--- a/drivers/bus/acpi/acpica/dispatcher/dswload2.c
+++ b/drivers/bus/acpi/acpica/dispatcher/dswload2.c
@@ -258,7 +258,7 @@ AcpiDsLoad2BeginOp (
 break;
 }
 
-/*lint -fallthrough */
+ACPI_FALLTHROUGH;
 
 default:
 
diff --git a/drivers/bus/acpi/acpica/executer/exfldio.c 
b/drivers/bus/acpi/acpica/executer/exfldio.c
index c6fc6e0a496..ece5c19ba57 100644
--- a/drivers/bus/acpi/acpica/executer/exfldio.c
+++ b/drivers/bus/acpi/acpica/executer/exfldio.c
@@ -508,7 +508,7 @@ AcpiExFieldDatumIo (
  * RegionField case and write the datum to the Operation Region
  */
 
-/*lint -fallthrough */
+ACPI_FALLTHROUGH;
 
 case ACPI_TYPE_LOCAL_REGION_FIELD:
 /*
diff --git a/drivers/bus/acpi/acpica/executer/exresop.c 
b/drivers/bus/acpi/acpica/executer/exresop.c
index e387a16de61..35f0f3a63f1 100644
--- a/drivers/bus/acpi/acpica/executer/exresop.c
+++ b/drivers/bus/acpi/acpica/executer/exresop.c
@@ -250,7 +250,7 @@ AcpiExResolveOperands (
 
 TargetOp = AML_DEBUG_OP;
 
-/*lint -fallthrough */
+ACPI_FALLTHROUGH;
 
 case ACPI_REFCLASS_ARG:
 case ACPI_REFCLASS_LOCAL:
@@ -314,7 +314,7 @@ AcpiExResolveOperands (
  * Else not a string - fall through to the normal Reference
  * case below
  */
-/*lint -fallthrough */
+ACPI_FALLTHROUGH;
 
 case ARGI_REFERENCE:/* References: */
 case ARGI_INTEGER

[ros-diffs] [reactos] 03/03: [NTOS:IO] Reduce stack usage in IopLoadServiceModule. CORE-17215

2020-11-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=828d5fa93e2cc987316264c043b19b50e02d8f4d

commit 828d5fa93e2cc987316264c043b19b50e02d8f4d
Author: Thomas Faber 
AuthorDate: Wed Jun 10 08:27:27 2020 +0200
Commit: Thomas Faber 
CommitDate: Fri Nov 27 12:44:35 2020 +0100

[NTOS:IO] Reduce stack usage in IopLoadServiceModule. CORE-17215
---
 ntoskrnl/io/iomgr/driver.c | 116 ++---
 1 file changed, 67 insertions(+), 49 deletions(-)

diff --git a/ntoskrnl/io/iomgr/driver.c b/ntoskrnl/io/iomgr/driver.c
index 9fd8c9b87c5..6b3949a5189 100644
--- a/ntoskrnl/io/iomgr/driver.c
+++ b/ntoskrnl/io/iomgr/driver.c
@@ -299,6 +299,70 @@ IopNormalizeImagePath(
 return STATUS_SUCCESS;
 }
 
+NTSTATUS
+IopQueryServiceSettings(
+_In_ PUNICODE_STRING ServiceName,
+_Out_ PUNICODE_STRING ServiceImagePath,
+_Out_ PULONG ServiceStart)
+{
+NTSTATUS Status;
+RTL_QUERY_REGISTRY_TABLE QueryTable[3];
+UNICODE_STRING CCSName = RTL_CONSTANT_STRING(
+L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services");
+HANDLE CCSKey, ServiceKey;
+
+/* Open CurrentControlSet */
+Status = IopOpenRegistryKeyEx(&CCSKey, NULL, &CCSName, KEY_READ);
+if (!NT_SUCCESS(Status))
+{
+DPRINT1("IopOpenRegistryKeyEx() failed for '%wZ' with status 0x%lx\n",
+&CCSName, Status);
+return Status;
+}
+
+/* Open service key */
+Status = IopOpenRegistryKeyEx(&ServiceKey, CCSKey, ServiceName, KEY_READ);
+if (!NT_SUCCESS(Status))
+{
+DPRINT1("IopOpenRegistryKeyEx() failed for '%wZ' with status 0x%lx\n",
+ServiceName, Status);
+ZwClose(CCSKey);
+return Status;
+}
+
+/*
+ * Get information about the service.
+ */
+RtlZeroMemory(QueryTable, sizeof(QueryTable));
+
+RtlInitUnicodeString(ServiceImagePath, NULL);
+
+QueryTable[0].Name = L"Start";
+QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
+QueryTable[0].EntryContext = ServiceStart;
+
+QueryTable[1].Name = L"ImagePath";
+QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
+QueryTable[1].EntryContext = ServiceImagePath;
+
+Status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,
+(PWSTR)ServiceKey,
+QueryTable,
+NULL,
+NULL);
+
+ZwClose(ServiceKey);
+ZwClose(CCSKey);
+
+if (!NT_SUCCESS(Status))
+{
+DPRINT1("RtlQueryRegistryValues() failed for '%wZ' (Status %lx)\n", 
ServiceName, Status);
+return Status;
+}
+
+return Status;
+}
+
 /*
  * IopLoadServiceModule
  *
@@ -317,11 +381,9 @@ IopLoadServiceModule(
 IN PUNICODE_STRING ServiceName,
 OUT PLDR_DATA_TABLE_ENTRY *ModuleObject)
 {
-RTL_QUERY_REGISTRY_TABLE QueryTable[3];
 ULONG ServiceStart;
-UNICODE_STRING ServiceImagePath, CCSName;
+UNICODE_STRING ServiceImagePath;
 NTSTATUS Status;
-HANDLE CCSKey, ServiceKey;
 PVOID BaseAddress;
 
 ASSERT(ExIsResourceAcquiredExclusiveLite(&IopDriverLoadResource));
@@ -341,54 +403,10 @@ IopLoadServiceModule(
 }
 else
 {
-/* Open CurrentControlSet */
-RtlInitUnicodeString(&CCSName,
- 
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services");
-Status = IopOpenRegistryKeyEx(&CCSKey, NULL, &CCSName, KEY_READ);
-if (!NT_SUCCESS(Status))
-{
-DPRINT1("IopOpenRegistryKeyEx() failed for '%wZ' with status 
0x%lx\n",
-&CCSName, Status);
-return Status;
-}
-
-/* Open service key */
-Status = IopOpenRegistryKeyEx(&ServiceKey, CCSKey, ServiceName, 
KEY_READ);
-if (!NT_SUCCESS(Status))
-{
-DPRINT1("IopOpenRegistryKeyEx() failed for '%wZ' with status 
0x%lx\n",
-ServiceName, Status);
-ZwClose(CCSKey);
-return Status;
-}
-
-/*
- * Get information about the service.
- */
-RtlZeroMemory(QueryTable, sizeof(QueryTable));
-
-RtlInitUnicodeString(&ServiceImagePath, NULL);
-
-QueryTable[0].Name = L"Start";
-QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
-QueryTable[0].EntryContext = &ServiceStart;
-
-QueryTable[1].Name = L"ImagePath";
-QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
-QueryTable[1].EntryContext = &ServiceImagePath;
-
-Status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE,
-(PWSTR)ServiceKey,
-QueryTable,
-NULL,
- 

[ros-diffs] [reactos] 02/03: [NTOS:KD] Avoid large stack buffer in KdpPrint. CORE-17215

2020-11-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2858ff53ce0bb75f1058b9b3ddb4139d46cb02bb

commit 2858ff53ce0bb75f1058b9b3ddb4139d46cb02bb
Author: Thomas Faber 
AuthorDate: Sat Aug 22 21:11:26 2020 +0200
Commit: Thomas Faber 
CommitDate: Fri Nov 27 10:31:45 2020 +0100

[NTOS:KD] Avoid large stack buffer in KdpPrint. CORE-17215
---
 ntoskrnl/kd64/kdprint.c | 80 ++---
 1 file changed, 62 insertions(+), 18 deletions(-)

diff --git a/ntoskrnl/kd64/kdprint.c b/ntoskrnl/kd64/kdprint.c
index 9932798fbde..a086652ddb3 100644
--- a/ntoskrnl/kd64/kdprint.c
+++ b/ntoskrnl/kd64/kdprint.c
@@ -13,6 +13,8 @@
 #define NDEBUG
 #include 
 
+#define KD_PRINT_MAX_BYTES 512
+
 /* FUNCTIONS */
 
 BOOLEAN
@@ -224,8 +226,8 @@ KdpPrompt(
 STRING PromptBuffer, ResponseBuffer;
 BOOLEAN Enable, Resend;
 PCHAR SafeResponseString;
-CHAR CapturedPrompt[512];
-CHAR SafeResponseBuffer[512];
+CHAR CapturedPrompt[KD_PRINT_MAX_BYTES];
+CHAR SafeResponseBuffer[KD_PRINT_MAX_BYTES];
 
 /* Normalize the lengths */
 PromptLength = min(PromptLength,
@@ -307,6 +309,50 @@ KdpPrompt(
 return ResponseBuffer.Length;
 }
 
+static
+NTSTATUS
+NTAPI
+KdpPrintFromUser(
+_In_ ULONG ComponentId,
+_In_ ULONG Level,
+_In_reads_bytes_(Length) PCHAR String,
+_In_ USHORT Length,
+_In_ KPROCESSOR_MODE PreviousMode,
+_In_ PKTRAP_FRAME TrapFrame,
+_In_ PKEXCEPTION_FRAME ExceptionFrame,
+_Out_ PBOOLEAN Handled)
+{
+CHAR CapturedString[KD_PRINT_MAX_BYTES];
+
+ASSERT(PreviousMode == UserMode);
+ASSERT(Length <= sizeof(CapturedString));
+
+/* Capture user-mode buffers */
+_SEH2_TRY
+{
+/* Probe and capture the string */
+ProbeForRead(String, Length, 1);
+KdpMoveMemory(CapturedString, String, Length);
+String = CapturedString;
+}
+_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+{
+/* Bad string pointer, bail out */
+_SEH2_YIELD(return STATUS_ACCESS_VIOLATION);
+}
+_SEH2_END;
+
+/* Now go through the kernel-mode code path */
+return KdpPrint(ComponentId,
+Level,
+String,
+Length,
+KernelMode,
+TrapFrame,
+ExceptionFrame,
+Handled);
+}
+
 NTSTATUS
 NTAPI
 KdpPrint(
@@ -322,7 +368,6 @@ KdpPrint(
 NTSTATUS Status;
 BOOLEAN Enable;
 STRING OutputString;
-CHAR CapturedString[512];
 
 if (NtQueryDebugFilterState(ComponentId, Level) == (NTSTATUS)FALSE)
 {
@@ -335,25 +380,24 @@ KdpPrint(
 *Handled = FALSE;
 
 /* Normalize the length */
-Length = min(Length, sizeof(CapturedString));
+Length = min(Length, KD_PRINT_MAX_BYTES);
 
 /* Check if we need to verify the string */
 if (PreviousMode != KernelMode)
 {
-/* Capture user-mode buffers */
-_SEH2_TRY
-{
-/* Probe and capture the string */
-ProbeForRead(String, Length, 1);
-KdpMoveMemory(CapturedString, String, Length);
-String = CapturedString;
-}
-_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-{
-/* Bad string pointer, bail out */
-_SEH2_YIELD(return STATUS_ACCESS_VIOLATION);
-}
-_SEH2_END;
+/* This case requires a 512 byte stack buffer.
+ * We don't want to use that much stack in the kernel case, but we
+ * can't use _alloca due to PSEH. So the buffer exists in this
+ * helper function instead.
+ */
+return KdpPrintFromUser(ComponentId,
+Level,
+String,
+Length,
+PreviousMode,
+TrapFrame,
+ExceptionFrame,
+Handled);
 }
 
 /* Setup the output string */



[ros-diffs] [reactos] 01/03: [NTOS:PNP] Avoid recursion in IopTraverseDeviceTree(Node). CORE-17215

2020-11-27 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ae1d272add25af42bd1acd453d41407363f6658a

commit ae1d272add25af42bd1acd453d41407363f6658a
Author: Thomas Faber 
AuthorDate: Mon Aug 17 04:05:53 2020 +0200
Commit: Thomas Faber 
CommitDate: Fri Nov 27 10:31:41 2020 +0100

[NTOS:PNP] Avoid recursion in IopTraverseDeviceTree(Node). CORE-17215
---
 ntoskrnl/io/pnpmgr/devnode.c | 87 +++-
 1 file changed, 46 insertions(+), 41 deletions(-)

diff --git a/ntoskrnl/io/pnpmgr/devnode.c b/ntoskrnl/io/pnpmgr/devnode.c
index 6f5e029ceff..a068cd71ddb 100644
--- a/ntoskrnl/io/pnpmgr/devnode.c
+++ b/ntoskrnl/io/pnpmgr/devnode.c
@@ -321,56 +321,36 @@ IopFreeDeviceNode(
 
 static
 NTSTATUS
-IopTraverseDeviceTreeNode(
+IopFindNextDeviceNodeForTraversal(
 _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))
+/* If we have a child, simply go down the tree */
+if (Context->DeviceNode->Child != NULL)
 {
-ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject);
-return Status;
+ASSERT(Context->DeviceNode->Child->Parent == Context->DeviceNode);
+Context->DeviceNode = Context->DeviceNode->Child;
+return STATUS_SUCCESS;
 }
 
-/* Traversal of all children nodes */
-for (ChildDeviceNode = ParentDeviceNode->Child;
- ChildDeviceNode != NULL;
- ChildDeviceNode = NextDeviceNode)
+while (Context->DeviceNode != Context->FirstDeviceNode)
 {
-/* 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))
+/* All children processed -- go sideways */
+if (Context->DeviceNode->Sibling != NULL)
 {
-ObDereferenceObject(ChildDeviceNode->PhysicalDeviceObject);
-ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject);
-return Status;
+ASSERT(Context->DeviceNode->Sibling->Parent == 
Context->DeviceNode->Parent);
+Context->DeviceNode = Context->DeviceNode->Sibling;
+return STATUS_SUCCESS;
 }
 
-NextDeviceNode = ChildDeviceNode->Sibling;
-ObDereferenceObject(ChildDeviceNode->PhysicalDeviceObject);
+/* We're the last sibling -- go back up */
+ASSERT(Context->DeviceNode->Parent->LastChild == Context->DeviceNode);
+Context->DeviceNode = Context->DeviceNode->Parent;
+
+/* We already visited the parent and all its children, so keep looking 
*/
 }
 
-ObDereferenceObject(ParentDeviceNode->PhysicalDeviceObject);
-return Status;
+/* Done with all children of the start node -- stop enumeration */
+return STATUS_UNSUCCESSFUL;
 }
 
 NTSTATUS
@@ -378,6 +358,7 @@ IopTraverseDeviceTree(
 _In_ PDEVICETREE_TRAVERSE_CONTEXT Context)
 {
 NTSTATUS Status;
+PDEVICE_NODE DeviceNode;
 
 DPRINT("Context 0x%p\n", Context);
 
@@ -387,8 +368,32 @@ IopTraverseDeviceTree(
 /* Start from the specified device node */
 Context->DeviceNode = Context->FirstDeviceNode;
 
-/* Recursively traverse the device tree */
-Status = IopTraverseDeviceTreeNode(Context);
+/* Traverse the device tree */
+do
+{
+DeviceNode = 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(DeviceNode->PhysicalDeviceObject);
+
+/* Call the action routine */
+Status = (Context->Action)(DeviceNode, Context->Context);
+if (NT_SUCCESS(Status))
+{
+/* Find next device node */
+ASSERT(Context->DeviceNode == DeviceNode);
+Status

[ros-diffs] [reactos] 02/02: [USER32_DYNAMIC_APITEST] Remove a tautological check. Spotted by clang.

2020-11-22 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=044be0e3142c4a3be71796b98237fa528866c090

commit 044be0e3142c4a3be71796b98237fa528866c090
Author: Thomas Faber 
AuthorDate: Sun Nov 22 13:21:00 2020 +0100
Commit: Thomas Faber 
CommitDate: Sun Nov 22 13:22:03 2020 +0100

[USER32_DYNAMIC_APITEST] Remove a tautological check. Spotted by clang.
---
 modules/rostests/apitests/user32_dynamic/load.c | 10 --
 1 file changed, 10 deletions(-)

diff --git a/modules/rostests/apitests/user32_dynamic/load.c 
b/modules/rostests/apitests/user32_dynamic/load.c
index 4c25aef4ec9..ea4a75e2f08 100644
--- a/modules/rostests/apitests/user32_dynamic/load.c
+++ b/modules/rostests/apitests/user32_dynamic/load.c
@@ -16,14 +16,12 @@ START_TEST(load)
 BOOL Ret;
 DWORD Error;
 PPEB Peb = NtCurrentPeb();
-PTEB Teb = NtCurrentTeb();
 
 /* Before init */
 hUser32 = GetModuleHandleW(L"user32");
 ok(hUser32 == NULL, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable == NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 hUser32 = LoadLibraryW(L"user32");
@@ -36,7 +34,6 @@ START_TEST(load)
 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 hUser32_2 = LoadLibraryW(L"user32");
@@ -49,7 +46,6 @@ START_TEST(load)
 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 Ret = FreeLibrary(hUser32);
@@ -62,7 +58,6 @@ START_TEST(load)
 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 Ret = FreeLibrary(hUser32);
@@ -75,7 +70,6 @@ START_TEST(load)
 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 Ret = FreeLibrary(hUser32);
@@ -88,7 +82,6 @@ START_TEST(load)
 ok(hUser32 == NULL, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 hUser32 = LoadLibraryW(L"user32");
@@ -101,7 +94,6 @@ START_TEST(load)
 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 Ret = FreeLibrary(hUser32);
@@ -114,7 +106,6 @@ START_TEST(load)
 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 
 SetLastError(12345);
 Ret = FreeLibrary(hUser32);
@@ -127,5 +118,4 @@ START_TEST(load)
 ok(hUser32 == NULL, "hUser32 = %p\n", hUser32);
 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", 
Peb->KernelCallbackTable);
 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", 
Peb->PostProcessInitRoutine);
-ok(Teb->Win32ClientInfo != NULL, "Win32ClientInfo = %p\n", 
Teb->Win32ClientInfo);
 }



[ros-diffs] [reactos] 01/02: [GITHUB] Add clang-cl location to the beginning of PATH instead of the end.

2020-11-22 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=99c02855a892c243e09ec0e8ddd7074edeadd1ef

commit 99c02855a892c243e09ec0e8ddd7074edeadd1ef
Author: Thomas Faber 
AuthorDate: Sun Nov 22 12:25:56 2020 +0100
Commit: Thomas Faber 
CommitDate: Sun Nov 22 13:21:58 2020 +0100

[GITHUB] Add clang-cl location to the beginning of PATH instead of the end.

Fixes build with the latest VS2019 (16.8.2).
The new version now adds Llvm\x64\bin to the PATH of the
"x64_x86 Cross Tools Commannd Prompt", so we must override this to
get x86 clang.
---
 .github/workflows/build.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 080bf8b4769..3b61db65ac0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -121,7 +121,7 @@ jobs:
   run: |
 mkdir build
 cd build
-$env:PATH = "$env:PATH;$env:VCToolsInstallDir\..\..\Llvm\bin"
+$env:PATH = "$env:VCToolsInstallDir\..\..\Llvm\bin;$env:PATH"
 cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake 
-DARCH:STRING=i386 -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 -DUSE_CLANG_CL:BOOL=1 
${{github.workspace}}\src
 - name: Build
   working-directory: ${{github.workspace}}\build



[ros-diffs] [reactos] 01/01: [ACPICA] Update to version 20201113. CORE-17382

2020-11-22 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9cc1a26b7036b76992d47affbb232c0f6f4f4949

commit 9cc1a26b7036b76992d47affbb232c0f6f4f4949
Author: Thomas Faber 
AuthorDate: Sun Nov 22 11:20:09 2020 +0100
Commit: Thomas Faber 
CommitDate: Sun Nov 22 11:23:25 2020 +0100

[ACPICA] Update to version 20201113. CORE-17382
---
 drivers/bus/acpi/acpica/events/evregion.c | 59 ++-
 drivers/bus/acpi/acpica/include/accommon.h|  2 +-
 drivers/bus/acpi/acpica/include/acpixf.h  |  2 +-
 drivers/bus/acpi/acpica/include/acuuid.h  |  5 +++
 drivers/bus/acpi/acpica/namespace/nspredef.c  |  9 ++--
 drivers/bus/acpi/acpica/namespace/nsprepkg.c  | 38 +
 drivers/bus/acpi/acpica/namespace/nsrepair2.c | 39 --
 media/doc/3rd Party Files.txt |  2 +-
 8 files changed, 79 insertions(+), 77 deletions(-)

diff --git a/drivers/bus/acpi/acpica/events/evregion.c 
b/drivers/bus/acpi/acpica/events/evregion.c
index 8427921cb6c..adb9c91601f 100644
--- a/drivers/bus/acpi/acpica/events/evregion.c
+++ b/drivers/bus/acpi/acpica/events/evregion.c
@@ -56,8 +56,10 @@ extern UINT8AcpiGbl_DefaultAddressSpaces[];
 /* Local prototypes */
 
 static void
-AcpiEvOrphanEcRegMethod (
-ACPI_NAMESPACE_NODE *EcDeviceNode);
+AcpiEvExecuteOrphanRegMethod (
+ACPI_NAMESPACE_NODE *DeviceNode,
+ACPI_ADR_SPACE_TYPE SpaceId);
+
 
 static ACPI_STATUS
 AcpiEvRegRun (
@@ -761,11 +763,13 @@ AcpiEvExecuteRegMethods (
 (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX,
 ACPI_NS_WALK_UNLOCK, AcpiEvRegRun, NULL, &Info, NULL);
 
-/* Special case for EC: handle "orphan" _REG methods with no region */
-
-if (SpaceId == ACPI_ADR_SPACE_EC)
+/*
+ * Special case for EC and GPIO: handle "orphan" _REG methods with
+ * no region.
+ */
+if (SpaceId == ACPI_ADR_SPACE_EC || SpaceId == ACPI_ADR_SPACE_GPIO)
 {
-AcpiEvOrphanEcRegMethod (Node);
+AcpiEvExecuteOrphanRegMethod (Node, SpaceId);
 }
 
 ACPI_DEBUG_PRINT_RAW ((ACPI_DB_NAMES,
@@ -846,32 +850,29 @@ AcpiEvRegRun (
 
 
/***
  *
- * FUNCTION:AcpiEvOrphanEcRegMethod
+ * FUNCTION:AcpiEvExecuteOrphanRegMethod
  *
- * PARAMETERS:  EcDeviceNode- Namespace node for an EC device
+ * PARAMETERS:  DeviceNode  - Namespace node for an ACPI device
+ *  SpaceId - The address space ID
  *
  * RETURN:  None
  *
- * DESCRIPTION: Execute an "orphan" _REG method that appears under the EC
+ * DESCRIPTION: Execute an "orphan" _REG method that appears under an ACPI
  *  device. This is a _REG method that has no corresponding region
- *  within the EC device scope. The orphan _REG method appears to
- *  have been enabled by the description of the ECDT in the ACPI
- *  specification: "The availability of the region space can be
- *  detected by providing a _REG method object underneath the
- *  Embedded Controller device."
- *
- *  To quickly access the EC device, we use the EcDeviceNode used
- *  during EC handler installation. Otherwise, we would need to
- *  perform a time consuming namespace walk, executing _HID
- *  methods to find the EC device.
+ *  within the device's scope. ACPI tables depending on these
+ *  "orphan" _REG methods have been seen for both EC and GPIO
+ *  Operation Regions. Presumably the Windows ACPI implementation
+ *  always calls the _REG method independent of the presence of
+ *  an actual Operation Region with the correct address space ID.
  *
  *  MUTEX:  Assumes the namespace is locked
  *
  
**/
 
 static void
-AcpiEvOrphanEcRegMethod (
-ACPI_NAMESPACE_NODE *EcDeviceNode)
+AcpiEvExecuteOrphanRegMethod (
+ACPI_NAMESPACE_NODE *DeviceNode,
+ACPI_ADR_SPACE_TYPE SpaceId)
 {
 ACPI_HANDLE RegMethod;
 ACPI_NAMESPACE_NODE *NextNode;
@@ -880,10 +881,10 @@ AcpiEvOrphanEcRegMethod (
 ACPI_OBJECT Objects[2];
 
 
-ACPI_FUNCTION_TRACE (EvOrphanEcRegMethod);
+ACPI_FUNCTION_TRACE (EvExecuteOrphanRegMethod);
 
 
-if (!EcDeviceNode)
+if (!DeviceNode)
 {
 return_VOID;
 }
@@ -894,7 +895,7 @@ AcpiEvOrphanEcRegMethod (
 
 /* Get a handle to a _REG method immediately under the EC device */
 
-Status = AcpiGetHandle (EcDeviceNode, METHOD_NAME__REG, &RegMethod);
+Status = AcpiGetHandle (DeviceNode, METHOD_NAME__REG, &RegMethod);
 if (ACPI_FAILURE (Status))
 {
 goto Exit; /* There is no _REG method present */
@@ -907,25 +908,25 @@ AcpiEvOrphanEcRegMeth

[ros-diffs] [reactos] 02/02: [NTOS:CM] Implement support for KeyValuePartialInformationAlign64. CORE-17358

2020-11-14 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=507c44247344fc88a0d8646bdfc91007a86dd1a4

commit 507c44247344fc88a0d8646bdfc91007a86dd1a4
Author: Thomas Faber 
AuthorDate: Fri Oct 30 17:29:29 2020 +0100
Commit: Thomas Faber 
CommitDate: Sat Nov 14 15:11:00 2020 +0100

[NTOS:CM] Implement support for KeyValuePartialInformationAlign64. 
CORE-17358
---
 ntoskrnl/config/cmvalche.c | 46 +++---
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/ntoskrnl/config/cmvalche.c b/ntoskrnl/config/cmvalche.c
index 7759b7c646f..07190266e92 100644
--- a/ntoskrnl/config/cmvalche.c
+++ b/ntoskrnl/config/cmvalche.c
@@ -574,16 +574,23 @@ CmpQueryKeyValueData(IN PCM_KEY_CONTROL_BLOCK Kcb,
 
 /* Partial information requested (no name or alignment!) */
 case KeyValuePartialInformation:
+case KeyValuePartialInformationAlign64:
 
 /* Check if this is a small key and compute key size */
 IsSmall = CmpIsKeyValueSmall(&KeySize,
  CellData->u.KeyValue.DataLength);
 
-/* Calculate the total size required */
-Size = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data) + KeySize;
-
-/* And this is the least we can work with */
-MinimumSize = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data);
+/* Calculate the total size required and the least we can work 
with */
+if (KeyValueInformationClass == KeyValuePartialInformationAlign64)
+{
+Size = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, 
Data) + KeySize;
+MinimumSize = 
FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, Data);
+}
+else
+{
+Size = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data) + 
KeySize;
+MinimumSize = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, 
Data);
+}
 
 /* Tell the caller the size we'll finally need, and set success */
 *ResultLength = Size;
@@ -598,9 +605,17 @@ CmpQueryKeyValueData(IN PCM_KEY_CONTROL_BLOCK Kcb,
 }
 
 /* Fill out the basic information */
-Info->KeyValuePartialInformation.TitleIndex = 0;
-Info->KeyValuePartialInformation.Type = CellData->u.KeyValue.Type;
-Info->KeyValuePartialInformation.DataLength = KeySize;
+if (KeyValueInformationClass == KeyValuePartialInformationAlign64)
+{
+Info->KeyValuePartialInformationAlign64.Type = 
CellData->u.KeyValue.Type;
+Info->KeyValuePartialInformationAlign64.DataLength = KeySize;
+}
+else
+{
+Info->KeyValuePartialInformation.TitleIndex = 0;
+Info->KeyValuePartialInformation.Type = 
CellData->u.KeyValue.Type;
+Info->KeyValuePartialInformation.DataLength = KeySize;
+}
 
 /* Now check if the key had any data */
 if (KeySize > 0)
@@ -649,9 +664,18 @@ CmpQueryKeyValueData(IN PCM_KEY_CONTROL_BLOCK Kcb,
 if (Buffer)
 {
 /* Copy the data into the aligned offset */
-RtlCopyMemory(Info->KeyValuePartialInformation.Data,
-  Buffer,
-  Size);
+if (KeyValueInformationClass == 
KeyValuePartialInformationAlign64)
+{
+
RtlCopyMemory(Info->KeyValuePartialInformationAlign64.Data,
+  Buffer,
+  Size);
+}
+else
+{
+RtlCopyMemory(Info->KeyValuePartialInformation.Data,
+  Buffer,
+  Size);
+}
 }
 }
 



[ros-diffs] [reactos] 01/02: [NTDLL_APITEST] Add a test for KeyValuePartialInformationAlign64. CORE-17358

2020-11-14 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b2cf64094cc0980f7d16e4cd089b3e9a9dd34773

commit b2cf64094cc0980f7d16e4cd089b3e9a9dd34773
Author: Thomas Faber 
AuthorDate: Sat Oct 31 13:08:06 2020 +0100
Commit: Thomas Faber 
CommitDate: Sat Nov 14 15:10:59 2020 +0100

[NTDLL_APITEST] Add a test for KeyValuePartialInformationAlign64. CORE-17358
---
 modules/rostests/apitests/ntdll/CMakeLists.txt|   1 +
 modules/rostests/apitests/ntdll/NtQueryValueKey.c | 115 ++
 modules/rostests/apitests/ntdll/testlist.c|   2 +
 3 files changed, 118 insertions(+)

diff --git a/modules/rostests/apitests/ntdll/CMakeLists.txt 
b/modules/rostests/apitests/ntdll/CMakeLists.txt
index bb2a8cad1f6..1c5be3bad1e 100644
--- a/modules/rostests/apitests/ntdll/CMakeLists.txt
+++ b/modules/rostests/apitests/ntdll/CMakeLists.txt
@@ -30,6 +30,7 @@ list(APPEND SOURCE
 NtQueryKey.c
 NtQuerySystemEnvironmentValue.c
 NtQuerySystemInformation.c
+NtQueryValueKey.c
 NtQueryVolumeInformationFile.c
 NtReadFile.c
 NtSaveKey.c
diff --git a/modules/rostests/apitests/ntdll/NtQueryValueKey.c 
b/modules/rostests/apitests/ntdll/NtQueryValueKey.c
new file mode 100644
index 000..b2b75948289
--- /dev/null
+++ b/modules/rostests/apitests/ntdll/NtQueryValueKey.c
@@ -0,0 +1,115 @@
+/*
+ * PROJECT: ReactOS API Tests
+ * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Test for NtQueryValueKey
+ * COPYRIGHT:   Copyright 2020 Thomas Faber (thomas.fa...@reactos.org)
+ */
+
+#include "precomp.h"
+#include 
+
+START_TEST(NtQueryValueKey)
+{
+NTSTATUS Status;
+HANDLE KeyHandle;
+UNICODE_STRING KeyName = 
RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows 
NT\\CurrentVersion");
+OBJECT_ATTRIBUTES ObjectAttributes;
+UNICODE_STRING ValueName = RTL_CONSTANT_STRING(L"SystemRoot");
+PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64 Info;
+PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64 InfoUnaligned;
+ULONG InfoLength;
+ULONG ResultLength;
+const WCHAR *StringData;
+ULONG StringLength;
+
+InitializeObjectAttributes(&ObjectAttributes,
+   &KeyName,
+   OBJ_CASE_INSENSITIVE,
+   NULL,
+   NULL);
+Status = NtOpenKey(&KeyHandle,
+   KEY_QUERY_VALUE,
+   &ObjectAttributes);
+if (!NT_SUCCESS(Status))
+{
+skip("Test key unavailable\n");
+return;
+}
+
+/* Specify zero-size buffer, get the length */
+ResultLength = 0x;
+Status = NtQueryValueKey(KeyHandle,
+ &ValueName,
+ KeyValuePartialInformationAlign64,
+ NULL,
+ 0,
+ &ResultLength);
+ok_hex(Status, STATUS_BUFFER_TOO_SMALL);
+ok(ResultLength > FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, 
Data) && ResultLength < 0x1,
+   "Invalid result length %lu\n", ResultLength);
+if (ResultLength < FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, 
Data))
+{
+skip("Result length %lu too small\n", ResultLength);
+goto Exit;
+}
+InfoLength = ResultLength;
+Info = RtlAllocateHeap(RtlGetProcessHeap(),
+   0,
+   InfoLength + 4);
+if (Info == NULL)
+{
+skip("Could not alloc %lu bytes\n", InfoLength);
+goto Exit;
+}
+
+/* Successful call */
+Status = NtQueryValueKey(KeyHandle,
+ &ValueName,
+ KeyValuePartialInformationAlign64,
+ Info,
+ InfoLength,
+ &ResultLength);
+ok_hex(Status, STATUS_SUCCESS);
+ok_int(ResultLength, InfoLength);
+
+ok_int(Info->Type, REG_SZ);
+StringLength = InfoLength - 
FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, Data);
+ok_int(Info->DataLength, StringLength);
+
+StringData = (PWCHAR)Info->Data;
+ok(Info->DataLength >= 5 * sizeof(WCHAR), "DataLength %lu is too small for 
path\n", Info->DataLength);
+if (Info->DataLength >= 5 * sizeof(WCHAR))
+{
+trace("SystemRoot: %.*ls\n", (int)(Info->DataLength / sizeof(WCHAR) - 
1), StringData);
+ok(StringData[0] >= 'A' && StringData[0] <= 'Z', "Data[0] = %x\n", 
StringData[0]);
+ok(StringData[1] == ':', "Data[1] = %x\n", StringData[1]);
+ok(StringData[2] == '\\', "Data[2] = %x\n", StringData[2]);
+ok(iswalnum(StringData[3]), "Data[3] = %x\n", StringData[3

[ros-diffs] [reactos] 01/01: [KMTESTS:HAL] Add a test for HalQueryAMLIIllegalIOPortAddresses. CORE-17359

2020-11-07 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=dab6b26a5790e27eb49ccf5002ca1ede01d17534

commit dab6b26a5790e27eb49ccf5002ca1ede01d17534
Author: Thomas Faber 
AuthorDate: Sat Oct 31 12:26:27 2020 +0100
Commit: Thomas Faber 
CommitDate: Sat Nov 7 11:36:14 2020 +0100

[KMTESTS:HAL] Add a test for HalQueryAMLIIllegalIOPortAddresses. CORE-17359
---
 modules/rostests/kmtests/CMakeLists.txt|   1 +
 modules/rostests/kmtests/hal/HalSystemInfo.c   | 154 +
 modules/rostests/kmtests/kmtest_drv/testlist.c |   2 +
 3 files changed, 157 insertions(+)

diff --git a/modules/rostests/kmtests/CMakeLists.txt 
b/modules/rostests/kmtests/CMakeLists.txt
index 0d7eb194aaf..9e3528cdf96 100644
--- a/modules/rostests/kmtests/CMakeLists.txt
+++ b/modules/rostests/kmtests/CMakeLists.txt
@@ -37,6 +37,7 @@ list(APPEND KMTEST_DRV_SOURCE
 
 example/Example.c
 example/KernelType.c
+hal/HalSystemInfo.c
 npfs/NpfsConnect.c
 npfs/NpfsCreate.c
 npfs/NpfsFileInfo.c
diff --git a/modules/rostests/kmtests/hal/HalSystemInfo.c 
b/modules/rostests/kmtests/hal/HalSystemInfo.c
new file mode 100644
index 000..fa998c37846
--- /dev/null
+++ b/modules/rostests/kmtests/hal/HalSystemInfo.c
@@ -0,0 +1,154 @@
+/*
+ * PROJECT: ReactOS Kernel-Mode Tests
+ * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE: Test for HalQuerySystemInformation
+ * COPYRIGHT:   Copyright 2020 Thomas Faber (thomas.fa...@reactos.org)
+ */
+
+#include 
+
+#define NDEBUG
+#include 
+
+static HAL_AMLI_BAD_IO_ADDRESS_LIST ExpectedList[] =
+{
+{ 0x, 0x10, 1, NULL },
+{ 0x0020, 0x02, 0, NULL },
+{ 0x0040, 0x04, 1, NULL },
+{ 0x0048, 0x04, 1, NULL },
+{ 0x0070, 0x02, 1, NULL },
+{ 0x0074, 0x03, 1, NULL },
+{ 0x0081, 0x03, 1, NULL },
+{ 0x0087, 0x01, 1, NULL },
+{ 0x0089, 0x01, 1, NULL },
+{ 0x008A, 0x02, 1, NULL },
+{ 0x008F, 0x01, 1, NULL },
+{ 0x0090, 0x02, 1, NULL },
+{ 0x0093, 0x02, 1, NULL },
+{ 0x0096, 0x02, 1, NULL },
+{ 0x00A0, 0x02, 0, NULL },
+{ 0x00C0, 0x20, 1, NULL },
+{ 0x04D0, 0x02, 0, NULL },
+/* We obviously don't have the expected pointer. Just use a non-null value 
*/
+{ 0x0CF8, 0x08, 1, (PVOID)1 },
+{ 0x, 0x00, 0, NULL },
+};
+
+static
+void
+TestAMLIllegalIOPortAddresses(void)
+{
+NTSTATUS Status;
+PHAL_AMLI_BAD_IO_ADDRESS_LIST AddressList;
+ULONG AddressListLength;
+ULONG ReturnedLength;
+
+/* Query required size and check that it's valid */
+ReturnedLength = 0x;
+Status = HalQuerySystemInformation(HalQueryAMLIIllegalIOPortAddresses,
+   0,
+   NULL,
+   &ReturnedLength);
+ok_eq_hex(Status, STATUS_INFO_LENGTH_MISMATCH);
+ok(ReturnedLength % sizeof(*AddressList) == 0, "List size %lu is not a 
multiple of %Iu\n", ReturnedLength, sizeof(*AddressList));
+if (skip(ReturnedLength > 0 && ReturnedLength < 0x1000, "Invalid 
length\n"))
+{
+return;
+}
+AddressListLength = ReturnedLength;
+AddressList = ExAllocatePoolWithTag(NonPagedPool,
+AddressListLength,
+'OImK');
+if (skip(AddressList != NULL, "Failed to alloc %lu bytes\n", 
AddressListLength))
+{
+return;
+}
+
+if (ReturnedLength != sizeof(*AddressList))
+{
+/* Try with space for exactly one entry and make sure we get
+ * the same return code
+ */
+RtlFillMemory(AddressList, AddressListLength, 0x55);
+ReturnedLength = 0x;
+Status = HalQuerySystemInformation(HalQueryAMLIIllegalIOPortAddresses,
+   sizeof(*AddressList),
+   AddressList,
+   &ReturnedLength);
+ok_eq_hex(Status, STATUS_INFO_LENGTH_MISMATCH);
+ok_eq_ulong(ReturnedLength, AddressListLength);
+ok_eq_hex(AddressList[0].BadAddrBegin, 0xUL);
+}
+
+/* One byte less than required should still return no data */
+RtlFillMemory(AddressList, AddressListLength, 0x55);
+ReturnedLength = 0x;
+Status = HalQuerySystemInformation(HalQueryAMLIIllegalIOPortAddresses,
+   AddressListLength - 1,
+   AddressList,
+   &ReturnedLength);
+ok_eq_hex(Status, STATUS_INFO_LENGTH_MISMATCH);
+ok_eq_ulong(ReturnedLength, AddressListLength);
+ok_eq_hex(AddressList[0].BadAddrBegin, 0xUL);
+
+/* Specify required size */
+RtlFillMemory(AddressList, AddressListLength, 0x55);
+ReturnedLength = 0x

[ros-diffs] [reactos] 01/01: [FASTFAT] Implement the overflow queue. CORE-17344 CORE-17328

2020-10-24 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=303f17f884513ebf89d4c10744219382fea1d1d1

commit 303f17f884513ebf89d4c10744219382fea1d1d1
Author: Thomas Faber 
AuthorDate: Sun Oct 18 15:23:52 2020 +0200
Commit: Thomas Faber 
CommitDate: Sat Oct 24 19:53:36 2020 +0200

[FASTFAT] Implement the overflow queue. CORE-17344 CORE-17328

This avoids blocking all Ex worker threads in fastfat, thereby making Cc
unable to issue the lazy writes that would unblock those workers.
This is more or less directly taken from fastfat_new.
---
 drivers/filesystems/fastfat/fsctl.c |  5 ++
 drivers/filesystems/fastfat/misc.c  | 92 ++---
 drivers/filesystems/fastfat/vfat.h  |  6 +++
 3 files changed, 97 insertions(+), 6 deletions(-)

diff --git a/drivers/filesystems/fastfat/fsctl.c 
b/drivers/filesystems/fastfat/fsctl.c
index a8cbca4670f..6764a67d329 100644
--- a/drivers/filesystems/fastfat/fsctl.c
+++ b/drivers/filesystems/fastfat/fsctl.c
@@ -600,6 +600,11 @@ VfatMount(
 DeviceExt->HashTableSize = HashTableSize;
 DeviceExt->VolumeDevice = DeviceObject;
 
+KeInitializeSpinLock(&DeviceExt->OverflowQueueSpinLock);
+InitializeListHead(&DeviceExt->OverflowQueue);
+DeviceExt->OverflowQueueCount = 0;
+DeviceExt->PostedRequestCount = 0;
+
 /* use same vpb as device disk */
 DeviceObject->Vpb = Vpb;
 DeviceToMount->Vpb = Vpb;
diff --git a/drivers/filesystems/fastfat/misc.c 
b/drivers/filesystems/fastfat/misc.c
index 443ad290817..76b17f1db36 100644
--- a/drivers/filesystems/fastfat/misc.c
+++ b/drivers/filesystems/fastfat/misc.c
@@ -336,12 +336,53 @@ static
 VOID
 NTAPI
 VfatDoRequest(
-PVOID IrpContext)
+PVOID Context)
 {
+PVFAT_IRP_CONTEXT IrpContext = Context;
+PDEVICE_EXTENSION DeviceExt;
+KIRQL OldIrql;
+
 InterlockedDecrement(&QueueCount);
-DPRINT("VfatDoRequest(IrpContext %p), MajorFunction %x, %d\n",
-   IrpContext, ((PVFAT_IRP_CONTEXT)IrpContext)->MajorFunction, 
QueueCount);
-VfatDispatchRequest((PVFAT_IRP_CONTEXT)IrpContext);
+
+if (IrpContext->Stack->FileObject != NULL)
+{
+DeviceExt = IrpContext->Stack->DeviceObject->DeviceExtension;
+ObReferenceObject(DeviceExt->VolumeDevice);
+}
+
+do
+{
+DPRINT("VfatDoRequest(IrpContext %p), MajorFunction %x, %d\n",
+   IrpContext, IrpContext->MajorFunction, QueueCount);
+VfatDispatchRequest(IrpContext);
+IrpContext = NULL;
+
+/* Now process any overflow items */
+if (DeviceExt != NULL)
+{
+KeAcquireSpinLock(&DeviceExt->OverflowQueueSpinLock, &OldIrql);
+if (DeviceExt->OverflowQueueCount != 0)
+{
+IrpContext = 
CONTAINING_RECORD(RemoveHeadList(&DeviceExt->OverflowQueue),
+   VFAT_IRP_CONTEXT,
+   WorkQueueItem.List);
+DeviceExt->OverflowQueueCount--;
+DPRINT("Processing overflow item for IRP %p context %p 
(%lu)\n",
+   IrpContext->Irp, IrpContext, 
DeviceExt->OverflowQueueCount);
+}
+else
+{
+ASSERT(IsListEmpty(&DeviceExt->OverflowQueue));
+DeviceExt->PostedRequestCount--;
+}
+KeReleaseSpinLock(&DeviceExt->OverflowQueueSpinLock, OldIrql);
+}
+} while (IrpContext != NULL);
+
+if (DeviceExt != NULL)
+{
+ObDereferenceObject(DeviceExt->VolumeDevice);
+}
 }
 
 static
@@ -349,6 +390,10 @@ NTSTATUS
 VfatQueueRequest(
 PVFAT_IRP_CONTEXT IrpContext)
 {
+PDEVICE_EXTENSION DeviceExt;
+KIRQL OldIrql;
+BOOLEAN Overflow;
+
 InterlockedIncrement(&QueueCount);
 DPRINT("VfatQueueRequest(IrpContext %p), %d\n", IrpContext, QueueCount);
 
@@ -357,10 +402,41 @@ VfatQueueRequest(
 ASSERT(!(IrpContext->Flags & IRPCONTEXT_QUEUE) &&
(IrpContext->Flags & IRPCONTEXT_COMPLETE));
 
+Overflow = FALSE;
 IrpContext->Flags |= IRPCONTEXT_CANWAIT;
 IoMarkIrpPending(IrpContext->Irp);
-ExInitializeWorkItem(&IrpContext->WorkQueueItem, VfatDoRequest, 
IrpContext);
-ExQueueWorkItem(&IrpContext->WorkQueueItem, CriticalWorkQueue);
+
+/* We should not block more than two worker threads per volume,
+ * or we might stop Cc from doing the work to unblock us.
+ * Add additional requests into the overflow queue instead and process
+ * them all in an existing worker thread (see VfatDoRequest above).
+ */
+if (IrpContext->Stack->FileObject != NULL)
+{
+DeviceExt = IrpContext->Stack->DeviceObject->DeviceExtension;
+KeAcquireSpinLock(&DeviceExt->OverflowQ

[ros-diffs] [reactos] 01/01: [FASTFAT] Ensure that deferred write IRP contexts are not touched. CORE-17328

2020-10-16 Thread Thomas Faber
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=320abafdc3ce9c89d561bb41e4d5bd6a34f1442e

commit 320abafdc3ce9c89d561bb41e4d5bd6a34f1442e
Author: Thomas Faber 
AuthorDate: Sun Oct 11 15:02:26 2020 +0200
Commit: Thomas Faber 
CommitDate: Fri Oct 16 16:18:56 2020 +0200

[FASTFAT] Ensure that deferred write IRP contexts are not touched. 
CORE-17328

Cc may decide to process deferred writes any time, so the context might
already be freed by the time we return from CcDeferWrite.
Also mark the IRP as pending, since we're going to return STATUS_PENDING.
---
 drivers/filesystems/fastfat/misc.c | 47 --
 drivers/filesystems/fastfat/rw.c   | 11 +
 drivers/filesystems/fastfat/vfat.h |  2 +-
 3 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/drivers/filesystems/fastfat/misc.c 
b/drivers/filesystems/fastfat/misc.c
index 4f7bf5b7d4b..443ad290817 100644
--- a/drivers/filesystems/fastfat/misc.c
+++ b/drivers/filesystems/fastfat/misc.c
@@ -130,7 +130,7 @@ VfatDispatchRequest(
 break;
 
 case IRP_MJ_WRITE:
-Status = VfatWrite(IrpContext);
+Status = VfatWrite(&IrpContext);
 break;
 
 case IRP_MJ_FILE_SYSTEM_CONTROL:
@@ -182,30 +182,33 @@ VfatDispatchRequest(
 Status = STATUS_DRIVER_INTERNAL_ERROR;
 }
 
-QueueIrp = BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_QUEUE);
-CompleteIrp = BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_COMPLETE);
+if (IrpContext != NULL)
+{
+QueueIrp = BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_QUEUE);
+CompleteIrp = BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_COMPLETE);
 
-ASSERT((!CompleteIrp && !QueueIrp) ||
-   (CompleteIrp && !QueueIrp) ||
-   (!CompleteIrp && QueueIrp));
+ASSERT((!CompleteIrp && !QueueIrp) ||
+   (CompleteIrp && !QueueIrp) ||
+   (!CompleteIrp && QueueIrp));
 
-if (CompleteIrp)
-{
-IrpContext->Irp->IoStatus.Status = Status;
-IoCompleteRequest(IrpContext->Irp, IrpContext->PriorityBoost);
-}
+if (CompleteIrp)
+{
+IrpContext->Irp->IoStatus.Status = Status;
+IoCompleteRequest(IrpContext->Irp, IrpContext->PriorityBoost);
+}
 
-if (QueueIrp)
-{
-/* Reset our status flags before queueing the IRP */
-IrpContext->Flags |= IRPCONTEXT_COMPLETE;
-IrpContext->Flags &= ~IRPCONTEXT_QUEUE;
-Status = VfatQueueRequest(IrpContext);
-}
-else
-{
-/* Unless the IRP was queued, always free the IRP context */
-VfatFreeIrpContext(IrpContext);
+if (QueueIrp)
+{
+/* Reset our status flags before queueing the IRP */
+IrpContext->Flags |= IRPCONTEXT_COMPLETE;
+IrpContext->Flags &= ~IRPCONTEXT_QUEUE;
+Status = VfatQueueRequest(IrpContext);
+}
+else
+{
+/* Unless the IRP was queued, always free the IRP context */
+VfatFreeIrpContext(IrpContext);
+}
 }
 
 FsRtlExitFileSystem();
diff --git a/drivers/filesystems/fastfat/rw.c b/drivers/filesystems/fastfat/rw.c
index 60713e104c4..0afebafe893 100644
--- a/drivers/filesystems/fastfat/rw.c
+++ b/drivers/filesystems/fastfat/rw.c
@@ -873,8 +873,9 @@ ByeBye:
 
 NTSTATUS
 VfatWrite(
-PVFAT_IRP_CONTEXT IrpContext)
+PVFAT_IRP_CONTEXT *pIrpContext)
 {
+PVFAT_IRP_CONTEXT IrpContext = *pIrpContext;
 PVFATFCB Fcb;
 PERESOURCE Resource = NULL;
 LARGE_INTEGER ByteOffset;
@@ -999,13 +1000,15 @@ VfatWrite(
 Retrying = BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_DEFERRED_WRITE);
 SetFlag(IrpContext->Flags, IRPCONTEXT_DEFERRED_WRITE);
 
+IoMarkIrpPending(IrpContext->Irp);
 Status = STATUS_PENDING;
+
+DPRINT1("Deferring write for Irp %p, context %p!\n", IrpContext->Irp, 
IrpContext);
 CcDeferWrite(IrpContext->FileObject, VfatHandleDeferredWrite,
  IrpContext, NULL, Length, Retrying);
+*pIrpContext = NULL;
 
-DPRINT1("Dererring write!\n");
-
-goto ByeBye;
+return Status;
 }
 
 if (IsVolume)
diff --git a/drivers/filesystems/fastfat/vfat.h 
b/drivers/filesystems/fastfat/vfat.h
index 593ceb7c2da..fcb3a25cca7 100644
--- a/drivers/filesystems/fastfat/vfat.h
+++ b/drivers/filesystems/fastfat/vfat.h
@@ -1189,7 +1189,7 @@ VfatRead(
 
 NTSTATUS
 VfatWrite(
-PVFAT_IRP_CONTEXT IrpContext);
+PVFAT_IRP_CONTEXT *pIrpContext);
 
 NTSTATUS
 NextCluster(



  1   2   3   4   5   6   >