Hi James,
This patch can help WinPv driver work fine on Windows 2003 x64 version.
Please review.
Best regards
Wayne
|
# HG changeset patch
# User Wayne Gong <wayne.gong@xxxxxxxxxx>
# Date 1215493632 -28800
# Node ID dbaf8f156f3f4cd6f6acc5a10cdf1d282809d1ff
# Parent bfc6e1f99b4fcbd4a5d20b1392d28be66fd310fc
Let winpv work for win2k3_x64.
diff -r bfc6e1f99b4f -r dbaf8f156f3f xenhide/xenhide.c
--- a/xenhide/xenhide.c Tue Jul 08 13:04:41 2008 +0800
+++ b/xenhide/xenhide.c Tue Jul 08 13:07:12 2008 +0800
@@ -171,12 +171,12 @@
XenHide_IdSuffixMatches(PDEVICE_OBJECT pdo, PWCHAR matching_id)
{
NTSTATUS status;
- ULONG remaining;
- ULONG string_length;
+ ULONG cmpLen = 0;
WCHAR ids[512];
PWCHAR ptr;
ULONG ids_length;
int i;
+ size_t j = 0;
for (i = 0; i < 2; i++)
{
@@ -190,20 +190,29 @@
//KdPrint((__DRIVER_NAME " i = %d, status = %x, ids_length = %d\n",
i, status, ids_length));
continue;
}
-
- remaining = ids_length / 2;
- for (ptr = ids; *ptr != 0; ptr += string_length + 1)
+ ptr = ids;
+ for (j = 0; j < 512 - 3; j++)
{
- RtlStringCchLengthW(ptr, remaining, (size_t *)&string_length);
- remaining -= string_length - 1;
- if (string_length >= wcslen(matching_id))
+ if (ids[j] == L'V' && ids[j+1] == L'E' && ids[j+2] == L'N')
+ {
+ ptr = ids + j;
+ cmpLen = 17; // "VEN_10EC&DEV_8139"
+ break;
+ }
+ if (ids[j] == L'P' && ids[j+1] == L'N' && ids[j+2] == L'P')
{
- ptr += string_length - wcslen(matching_id);
- string_length -= (ULONG)wcslen(matching_id);
+ ptr = ids + j;
+ cmpLen = 7; // "PNP0A03"
+ break;
}
- //KdPrint((__DRIVER_NAME " Comparing '%S' and '%S'\n", ptr,
matching_id));
- if (wcscmp(ptr, matching_id) == 0)
- return TRUE;
+ }
+ if (j == 512 - 3)
+ break;
+ //KdPrint((__DRIVER_NAME " Comparing '%S' and '%S'\n", ptr,
matching_id));
+ if (wcsncmp(ptr, matching_id, cmpLen) == 0)
+ {
+ //KdPrint((__DRIVER_NAME " Matched\n"));
+ return TRUE;
}
}
//KdPrint((__DRIVER_NAME " No match\n"));
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|