-/* $Id: window.c,v 1.108 2004/04/09 20:03:15 navaraf Exp $
+/* $Id: window.c,v 1.109 2004/04/10 07:37:28 navaraf Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS user32.dll
UNICODE_STRING ucWindowName;
HWND Result;
- if (IS_ATOM(lpszClass))
+ if (lpszClass == NULL)
+ {
+ ucClassName.Buffer = NULL;
+ ucClassName.Length = 0;
+ }
+ else if (IS_ATOM(lpszClass))
{
ucClassName.Buffer = (LPWSTR)lpszClass;
ucClassName.Length = 0;
LPCWSTR lpszClass,
LPCWSTR lpszWindow)
{
- UNICODE_STRING ucClassName;
- UNICODE_STRING ucWindowName;
+ UNICODE_STRING ucClassName;
+ UNICODE_STRING ucWindowName;
- if (IS_ATOM(lpszClass))
- {
- RtlInitUnicodeString(&ucClassName, NULL);
- ucClassName.Buffer = (LPWSTR)lpszClass;
- }
- else
- {
- RtlInitUnicodeString(&ucClassName, lpszClass);
- }
+ if (lpszClass == NULL)
+ {
+ ucClassName.Buffer = NULL;
+ ucClassName.Length = 0;
+ }
+ else if (IS_ATOM(lpszClass))
+ {
+ RtlInitUnicodeString(&ucClassName, NULL);
+ ucClassName.Buffer = (LPWSTR)lpszClass;
+ }
+ else
+ {
+ RtlInitUnicodeString(&ucClassName, lpszClass);
+ }
- // Window names can't be atoms, and if lpszWindow = NULL,
- // RtlInitUnicodeString will clear it
+ // Window names can't be atoms, and if lpszWindow = NULL,
+ // RtlInitUnicodeString will clear it
- RtlInitUnicodeString(&ucWindowName, lpszWindow);
-
+ RtlInitUnicodeString(&ucWindowName, lpszWindow);
- return NtUserFindWindowEx(hwndParent, hwndChildAfter, &ucClassName, &ucWindowName);
+ return NtUserFindWindowEx(hwndParent, hwndChildAfter, &ucClassName, &ucWindowName);
}
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: window.c,v 1.210 2004/04/09 20:03:19 navaraf Exp $
+/* $Id: window.c,v 1.211 2004/04/10 07:37:28 navaraf Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
NTSTATUS status;
HWND windowHandle;
PWINDOW_OBJECT ParentWindow, WndChildAfter, WndChild;
- PWNDCLASS_OBJECT classObject;
+ PWNDCLASS_OBJECT classObject = NULL;
+
+ DPRINT1("NtUserFindWindowEx(%x,%x,%wZ,%wZ)\n",
+ hwndParent, hwndChildAfter, ucClassName, ucWindowName);
// Get a pointer to the class
- status = ClassReferenceClassByNameOrAtom(&classObject, ucClassName->Buffer);
- if (!NT_SUCCESS(status))
+ if (ucClassName->Buffer != NULL)
{
- return NULL;
+ status = ClassReferenceClassByNameOrAtom(&classObject, ucClassName->Buffer);
+ if (!NT_SUCCESS(status))
+ {
+ DPRINT1("Error 1\n");
+ return NULL;
+ }
}
// If hwndParent==NULL use the desktop window instead
if(!ParentWindow)
{
- ObmDereferenceObject(classObject);
+ if (classObject != NULL)
+ ObmDereferenceObject(classObject);
+ DPRINT1("Error 2\n");
return NULL;
}
if (!(WndChildAfter = IntGetWindowObject(hwndChildAfter)))
{
SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE);
+ DPRINT1("Error 3\n");
return NULL;
}
IntLockRelatives(WndChildAfter);
if (WndChildAfter->Parent != ParentWindow->Self)
{
+ DPRINT1("Error 4\n");
IntUnLockRelatives(WndChildAfter);
SetLastWin32Error(ERROR_INVALID_PARAMETER);
return NULL;
while (WndChild)
{
- if (classObject == WndChild->Class && (ucWindowName->Buffer==NULL ||
+ if ((classObject == NULL || classObject == WndChild->Class) &&
+ (ucWindowName->Buffer==NULL ||
RtlCompareUnicodeString (ucWindowName, &WndChild->WindowName, TRUE) == 0))
{
windowHandle = WndChild->Self;
IntUnLockRelatives(ParentWindow);
IntReleaseWindowObject(ParentWindow);
- ObmDereferenceObject (classObject);
+ if (classObject != NULL)
+ ObmDereferenceObject (classObject);
+ DPRINT1("Success: %x\n", windowHandle);
return windowHandle;
}
IntUnLockRelatives(ParentWindow);
IntReleaseWindowObject(ParentWindow);
- ObmDereferenceObject (classObject);
+ if (classObject != NULL)
+ ObmDereferenceObject (classObject);
+ DPRINT1("Not found\n");
return NULL;
}