Key->ValueCount = 0;
Key->NameSize = KeyName->Length;
+ /* FIXME: It's not enough to allocate this way, because later
+ this memory gets overwritten with bigger names */
Key->Name = malloc (Key->NameSize);
if (!Key->Name)
return NULL;
RtlInitUnicodeString(&KeyString, LocalKeyName);
/* Redirect from 'CurrentControlSet' to 'ControlSet001' */
- if (!memcmp(LocalKeyName, L"CurrentControlSet", 34) &&
+ if (!xwcsncmp(LocalKeyName, L"CurrentControlSet", 17) &&
ParentKey->NameSize == 12 &&
!memcmp(ParentKey->Name, L"SYSTEM", 12))
RtlInitUnicodeString(&KeyString, L"ControlSet001");
else return NULL;
}
+int xwcsncmp(PCWSTR s1, PCWSTR s2, size_t n)
+{
+ while(n--)
+ {
+ if(*s1 != *s2)
+ return 1;
+
+ if(*s1 == 0)
+ return 0;
+
+ s1++;
+ s2++;
+ }
+
+ return 0;
+}
+
/*
* @implemented
*
va_start(ap, Format);
vprintf(Format, ap);
va_end(ap);
+
+ return 0;
+}
+
+VOID
+NTAPI
+RtlAssert(PVOID FailedAssertion,
+ PVOID FileName,
+ ULONG LineNumber,
+ PCHAR Message)
+{
+ if (NULL != Message)
+ {
+ DbgPrint("Assertion \'%s\' failed at %s line %d: %s\n",
+ (PCHAR)FailedAssertion,
+ (PCHAR)FileName,
+ LineNumber,
+ Message);
+ }
+ else
+ {
+ DbgPrint("Assertion \'%s\' failed at %s line %d\n",
+ (PCHAR)FailedAssertion,
+ (PCHAR)FileName,
+ LineNumber);
+ }
+
+ //DbgBreakPoint();
}