From 8143accee26d9fcd8704dd695ccf03b4764b0848 Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Sat, 31 Oct 1998 12:19:56 +0000 Subject: [PATCH] Lots of stubs to get winlogon.exe from nt3.51 and other NT3.51 applets a bit further. --- misc/ntdll.c | 160 ++++++++++++++++++++++++++++++++++++++++---- relay32/ntdll.spec | 34 +++++----- relay32/relay386.c | 2 + relay32/user32.spec | 12 ++-- windows/user.c | 44 ++++++++++++ 5 files changed, 217 insertions(+), 35 deletions(-) diff --git a/misc/ntdll.c b/misc/ntdll.c index 5da4944611f..3e863f15813 100644 --- a/misc/ntdll.c +++ b/misc/ntdll.c @@ -431,7 +431,7 @@ WINAPI RtlUnicodeStringToOemString(LPANSI_STRING oem,LPUNICODE_STRING uni,BOOL32 * RtlUnicodeStringToAnsiString [NTDLL.507] */ DWORD /* NTSTATUS */ -WINAPI RtlUnicodeStringToAnsiString(LPUNICODE_STRING uni,LPANSI_STRING oem,BOOL32 alloc) +WINAPI RtlUnicodeStringToAnsiString(LPANSI_STRING oem,LPUNICODE_STRING uni,BOOL32 alloc) { if (alloc) { oem->Buffer = (LPSTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,uni->Length/2)+1; @@ -454,10 +454,11 @@ DWORD WINAPI RtlNtStatusToDosError(DWORD error) /************************************************************************** * RtlGetNtProductType [NTDLL.390] */ -DWORD WINAPI RtlGetNtProductType(LPVOID x) +BOOL32 WINAPI RtlGetNtProductType(LPDWORD type) { - FIXME(ntdll, "(%p): stub\n", x); - return 0; + FIXME(ntdll, "(%p): stub\n", type); + *type=3; /* dunno. 1 for client, 3 for server? */ + return 1; } /************************************************************************** @@ -760,11 +761,9 @@ WINAPI RtlExtendedIntegerMultiply( #endif } -DWORD WINAPI NtOpenKey(DWORD x1,DWORD x2,DWORD x3) { - FIXME(ntdll,"(0x%08lx(%s),0x%08lx,0x%08lx),stub!\n",x1, - debugstr_w(*(LPWSTR*)x1),x2,x3); - /* hmm... */ - return RegOpenKey32W(x2,*(LPWSTR*)x1,x3); +DWORD WINAPI NtOpenKey(DWORD x1,DWORD x2,LPUNICODE_STRING key) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx(%s)),stub!\n",x1,x2,key,key->Buffer); + return RegOpenKey32W(HKEY_LOCAL_MACHINE,key->Buffer,x1); } DWORD WINAPI NtQueryValueKey(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6) { @@ -855,11 +854,148 @@ DWORD WINAPI RtlEqualSid(DWORD x1,DWORD x2) { FIXME(ntdll,"(0x%08lx,0x%08lx),stub!\n", x1,x2); return TRUE; } + /****************************************************************************** -* RtlFreeSid [NTDLL.376] -* -*/ + * RtlFreeSid [NTDLL.376] + */ DWORD WINAPI RtlFreeSid(DWORD x1) { FIXME(ntdll,"(0x%08lx),stub!\n", x1); return TRUE; } + +/****************************************************************************** + * NtCreatePagingFile [NTDLL] + */ +DWORD WINAPI NtCreatePagingFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4); + return 0; +} + +/****************************************************************************** + * RtlGetDaclSecurityDescriptor [NTDLL] + */ +DWORD WINAPI RtlGetDaclSecurityDescriptor(DWORD x1,DWORD x2,DWORD x3,DWORD x4) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4); + return 0; +} + +/****************************************************************************** + * NtDuplicateObject [NTDLL] + */ +DWORD WINAPI NtDuplicateObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5, + DWORD x6,DWORD x7 +) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6,x7); + return 0; +} + +/****************************************************************************** + * RtlCreateEnvironment [NTDLL] + */ +DWORD WINAPI RtlCreateEnvironment(DWORD x1,DWORD x2) { + FIXME(ntdll,"(0x%08lx,0x%08lx),stub!\n",x1,x2); + return 0; +} + +/****************************************************************************** + * RtlDestroyEnvironment [NTDLL] + */ +DWORD WINAPI RtlDestroyEnvironment(DWORD x) { + FIXME(ntdll,"(0x%08lx),stub!\n",x); + return 0; +} + +/****************************************************************************** + * RtlQueryEnvironmentVariable_U [NTDLL] + */ +DWORD WINAPI RtlQueryEnvironmentVariable_U(DWORD x1,DWORD x2,DWORD x3) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3); + return 0; +} + +/****************************************************************************** + * RtlSetEnvironmentVariable [NTDLL] + */ +DWORD WINAPI RtlSetEnvironmentVariable(DWORD x1,DWORD x2,DWORD x3) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3); + return 0; +} + +/****************************************************************************** + * NtDuplicateToken [NTDLL] + */ +DWORD WINAPI NtDuplicateToken( + DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6 +) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6); + return 0; +} + +/****************************************************************************** + * NtAdjustPrivilegesToken [NTDLL] + */ +DWORD WINAPI NtAdjustPrivilegesToken( + DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6 +) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6); + return 0; +} + +/****************************************************************************** + * NtOpenProcessToken [NTDLL] + */ +DWORD WINAPI NtOpenProcessToken(DWORD x1,DWORD x2,DWORD x3) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3); + return 0; +} + +/****************************************************************************** + * NtSetInformationThread [NTDLL] + */ +DWORD WINAPI NtSetInformationThread(DWORD x1,DWORD x2,DWORD x3,DWORD x4) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4); + return 0; +} + +/****************************************************************************** + * NtOpenThreadToken [NTDLL] + */ +DWORD WINAPI NtOpenThreadToken(DWORD x1,DWORD x2,DWORD x3,DWORD x4) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4); + return 0; +} + +/****************************************************************************** + * RtlNewSecurityObject [NTDLL] + */ +DWORD WINAPI RtlNewSecurityObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6); + return 0; +} + +/****************************************************************************** + * RtlDeleteSecurityObject [NTDLL] + */ +DWORD WINAPI RtlDeleteSecurityObject(DWORD x1) { + FIXME(ntdll,"(0x%08lx),stub!\n",x1); + return 0; +} + +/****************************************************************************** + * NtSetVolumeInformationFile [NTDLL] + */ +DWORD WINAPI NtSetVolumeInformationFile(DWORD x1,DWORD x2,DWORD x3,DWORD x4, + DWORD x5 +) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5); + return 0; +} + +/****************************************************************************** + * NtCreatePort [NTDLL] + */ +DWORD WINAPI NtCreatePort(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) { + FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5); + return 0; +} + diff --git a/relay32/ntdll.spec b/relay32/ntdll.spec index f19cd1aa4e6..e1f905f6dc8 100644 --- a/relay32/ntdll.spec +++ b/relay32/ntdll.spec @@ -55,7 +55,7 @@ type win32 052 stub NtAccessCheck 053 stub NtAccessCheckAndAuditAlarm 054 stub NtAdjustGroupsToken -055 stub NtAdjustPrivilegesToken +055 stdcall NtAdjustPrivilegesToken(long long long long long long) NtAdjustPrivilegesToken 056 stub NtAlertResumeThread 057 stub NtAlertThread 058 stub NtAllocateLocallyUniqueId @@ -79,8 +79,8 @@ type win32 076 stub NtCreateMailslotFile 077 stub NtCreateMutant 078 stub NtCreateNamedPipeFile -079 stub NtCreatePagingFile -080 stub NtCreatePort +079 stdcall NtCreatePagingFile(long long long long) NtCreatePagingFile +080 stdcall NtCreatePort(long long long long long) NtCreatePort 081 stub NtCreateProcess 082 stub NtCreateProfile 083 stub NtCreateSection @@ -96,8 +96,8 @@ type win32 093 stub NtDeleteValueKey 094 stdcall NtDeviceIoControlFile(long long long long long long long long long long) NtDeviceIoControlFile 095 stub NtDisplayString -096 stub NtDuplicateObject -097 stub NtDuplicateToken +096 stdcall NtDuplicateObject(long long long long long long long) NtDuplicateObject +097 stdcall NtDuplicateToken(long long long long long long) NtDuplicateToken 098 stub NtEnumerateBus 099 stub NtEnumerateKey 100 stub NtEnumerateValueKey @@ -133,12 +133,12 @@ type win32 130 stub NtOpenMutant 131 stub NtOpenObjectAuditAlarm 132 stub NtOpenProcess -133 stub NtOpenProcessToken +133 stdcall NtOpenProcessToken(long long long) NtOpenProcessToken 134 stub NtOpenSection 135 stub NtOpenSemaphore 136 stub NtOpenSymbolicLinkObject 137 stub NtOpenThread -138 stub NtOpenThreadToken +138 stdcall NtOpenThreadToken(long long long long) NtOpenThreadToken 139 stub NtOpenTimer 140 stub NtPlugPlayControl 141 stub NtPrivilegeCheck @@ -169,7 +169,7 @@ type win32 166 stub NtQuerySymbolicLinkObject 167 stub NtQuerySystemEnvironmentValue 168 stdcall NtQuerySystemInformation(long long long long) NtQuerySystemInformation -169 stub NtQuerySystemTime +169 stdcall NtQuerySystemTime(ptr) GetSystemTimeAsFileTime 170 stub NtQueryTimer 171 stdcall NtQueryTimerResolution(long long long) NtQueryTimerResolution 172 stdcall NtQueryValueKey(long long long long long long) NtQueryValueKey @@ -208,7 +208,7 @@ type win32 205 stub NtSetInformationKey 206 stub NtSetInformationObject 207 stdcall NtSetInformationProcess(long long long long) NtSetInformationProcess -208 stub NtSetInformationThread +208 stdcall NtSetInformationThread(long long long long) NtSetInformationThread 209 stub NtSetInformationToken 210 stub NtSetIntervalProfile 211 stub NtSetIoCompletion @@ -224,7 +224,7 @@ type win32 221 stdcall NtSetTimer(long long long long long long) NtSetTimer 222 stub NtSetTimerResolution 223 stub NtSetValueKey -224 stub NtSetVolumeInformationFile +224 stdcall NtSetVolumeInformationFile(long long long long long) NtSetVolumeInformationFile 225 stub NtShutdownSystem 226 stub NtStartProfile 227 stub NtStopProfile @@ -308,7 +308,7 @@ type win32 305 stub RtlCopyUnicodeString 306 stdcall RtlCreateAcl(ptr long long) RtlCreateAcl 307 stub RtlCreateAndSetSD -308 stub RtlCreateEnvironment +308 stdcall RtlCreateEnvironment(long long) RtlCreateEnvironment 309 stdcall RtlCreateHeap(long long long) HeapCreate 310 stub RtlCreateProcessParameters 311 stub RtlCreateQueryDebugBuffer @@ -331,8 +331,8 @@ type win32 328 stub RtlDeleteElementGenericTable 329 stub RtlDeleteRegistryValue 330 stub RtlDeleteResource -331 stub RtlDeleteSecurityObject -332 stub RtlDestroyEnvironment +331 stdcall RtlDeleteSecurityObject(long) RtlDeleteSecurityObject +332 stdcall RtlDestroyEnvironment(long) RtlDestroyEnvironment 333 stub RtlDestroyHeap 334 stub RtlDestroyProcessParameters 335 stub RtlDestroyQueryDebugBuffer @@ -384,7 +384,7 @@ type win32 381 stub RtlGetCompressionWorkSpaceSize 382 stub RtlGetControlSecurityDescriptor 383 stub RtlGetCurrentDirectory_U -384 stub RtlGetDaclSecurityDescriptor +384 stdcall RtlGetDaclSecurityDescriptor(long long long long) RtlGetDaclSecurityDescriptor 385 stub RtlGetElementGenericTable 386 stub RtlGetFullPathName_U 387 stub RtlGetGroupSecurityDescriptor @@ -440,7 +440,7 @@ type win32 437 stub RtlMultiByteToUnicodeSize 438 stub RtlNewInstanceSecurityObject 439 stub RtlNewSecurityGrantedAccess -440 stub RtlNewSecurityObject +440 stdcall RtlNewSecurityObject(long long long long long long) RtlNewSecurityObject 441 stdcall RtlNormalizeProcessParams(ptr) RtlNormalizeProcessParams 442 stdcall RtlNtStatusToDosError(long) RtlNtStatusToDosError 443 stub RtlNumberGenericTableElements @@ -454,7 +454,7 @@ type win32 451 stub RtlPrefixString 452 stub RtlPrefixUnicodeString 453 stub RtlProtectHeap -454 stub RtlQueryEnvironmentVariable_U +454 stdcall RtlQueryEnvironmentVariable_U(long long long) RtlQueryEnvironmentVariable_U 455 stub RtlQueryInformationAcl 456 stub RtlQueryProcessBackTraceInformation 457 stub RtlQueryProcessDebugInformation @@ -484,7 +484,7 @@ type win32 481 stub RtlSetCurrentDirectory_U 482 stub RtlSetCurrentEnvironment 483 stdcall RtlSetDaclSecurityDescriptor(ptr long ptr long) RtlSetDaclSecurityDescriptor -484 stub RtlSetEnvironmentVariable +484 stdcall RtlSetEnvironmentVariable(long long long) RtlSetEnvironmentVariable 485 stdcall RtlSetGroupSecurityDescriptor(ptr ptr long) RtlSetGroupSecurityDescriptor 486 stub RtlSetInformationAcl 487 stdcall RtlSetOwnerSecurityDescriptor(ptr ptr long) RtlSetOwnerSecurityDescriptor diff --git a/relay32/relay386.c b/relay32/relay386.c index bb6297f062c..b1f52a77f7c 100644 --- a/relay32/relay386.c +++ b/relay32/relay386.c @@ -74,6 +74,7 @@ int RELAY_CallFrom32( int ret_addr, ... ) FARPROC32 func; unsigned int mask, typemask; WORD fs; + DWORD deadbeef = 0xdeadbeef,*xdeadbeef = &deadbeef; int *args = &ret_addr; /* Relay addr is the return address for this function */ @@ -188,6 +189,7 @@ int RELAY_CallFrom32( int ret_addr, ... ) if(show) DPRINTF( "Ret %s() retval=%08x ret=%08x fs=%04x\n", buffer, ret, ret_addr, fs ); + assert(*xdeadbeef==0xdeadbeef); return ret; } diff --git a/relay32/user32.spec b/relay32/user32.spec index 28f19b9ced3..5d25bd43190 100644 --- a/relay32/user32.spec +++ b/relay32/user32.spec @@ -69,7 +69,7 @@ type win32 66 stdcall CreateCaret(long long long long) CreateCaret32 67 stdcall CreateCursor(long long long long long ptr ptr) CreateCursor32 68 stub CreateDesktopA - 69 stub CreateDesktopW + 69 stdcall CreateDesktopW(wstr wstr ptr long long ptr) CreateDesktop32W 70 stdcall CreateDialogIndirectParamA(long ptr long ptr long) CreateDialogIndirectParam32A 71 stdcall CreateDialogIndirectParamAorW (long ptr long ptr long) CreateDialogIndirectParam32AorW 72 stdcall CreateDialogIndirectParamW(long ptr long ptr long) CreateDialogIndirectParam32W @@ -86,7 +86,7 @@ type win32 83 stdcall CreateWindowExA(long str str long long long long long long long long ptr) CreateWindowEx32A 84 stdcall CreateWindowExW(long wstr wstr long long long long long long long long ptr) CreateWindowEx32W 85 stub CreateWindowStationA - 86 stub CreateWindowStationW + 86 stdcall CreateWindowStationW(wstr long long ptr) CreateWindowStation32W 87 stub DdeAbandonTransaction 88 stub DdeAccessData 89 stub DdeAddData @@ -434,7 +434,7 @@ type win32 431 stdcall RegisterClipboardFormatA(str) RegisterClipboardFormat32A 432 stdcall RegisterClipboardFormatW(wstr) RegisterClipboardFormat32W 433 stdcall RegisterHotKey(long long long long) RegisterHotKey -434 stub RegisterLogonProcess +434 stdcall RegisterLogonProcess(long long) RegisterLogonProcess 435 stub RegisterSystemThread 436 stdcall RegisterTasklist (long) RegisterTaskList32 437 stdcall RegisterWindowMessageA(ptr) RegisterWindowMessage32A @@ -496,7 +496,7 @@ type win32 493 stub SetMessageExtraInfo 494 stdcall SetMessageQueue(long) SetMessageQueue32 495 stdcall SetParent(long long) SetParent32 -496 stub SetProcessWindowStation +496 stdcall SetProcessWindowStation(long) SetProcessWindowStation 497 stdcall SetPropA(long str long) SetProp32A 498 stdcall SetPropW(long wstr long) SetProp32W 499 stdcall SetRect(ptr long long long long) SetRect32 @@ -514,14 +514,14 @@ type win32 511 stdcall SetTimer(long long long ptr) SetTimer32 512 stdcall SetUserObjectInformationA(long long long long) SetUserObjectInformation32A 513 stub SetUserObjectInformationW -514 stub SetUserObjectSecurity +514 stdcall SetUserObjectSecurity(long ptr ptr) SetUserObjectSecurity 515 stdcall SetWindowContextHelpId(long long) SetWindowContextHelpId 516 stub SetWindowFullScreenState 517 stdcall SetWindowLongA(long long long) SetWindowLong32A 518 stdcall SetWindowLongW(long long long) SetWindowLong32W 519 stdcall SetWindowPlacement(long ptr) SetWindowPlacement32 520 stdcall SetWindowPos(long long long long long long long) SetWindowPos32 -521 stub SetWindowStationUser +521 stdcall SetWindowStationUser(long long) SetWindowStationUser 522 stdcall SetWindowTextA(long str) SetWindowText32A 523 stdcall SetWindowTextW(long wstr) SetWindowText32W 524 stdcall SetWindowWord(long long long) SetWindowWord32 diff --git a/windows/user.c b/windows/user.c index 1f1c34b3906..75c2847a3ec 100644 --- a/windows/user.c +++ b/windows/user.c @@ -421,3 +421,47 @@ DWORD WINAPI UserSeeUserDo(WORD wReqType, WORD wParam1, WORD wParam2, WORD wPara } } +DWORD WINAPI RegisterLogonProcess(HANDLE32 hprocess,BOOL32 x) { + FIXME(win32,"(%d,%d),stub!\n",hprocess,x); + return 1; +} + +HANDLE32 /* HWINSTA */ WINAPI CreateWindowStation32W( + LPWSTR winstation,DWORD res1,DWORD desiredaccess, + LPSECURITY_ATTRIBUTES lpsa +) { + FIXME(win32,"(%s,0x%08lx,0x%08lx,%p),stub!\n",debugstr_w(winstation), + res1,desiredaccess,lpsa + ); + return 0xdeadcafe; +} + +BOOL32 WINAPI SetProcessWindowStation(/*HWINSTA*/ HANDLE32 hWinSta) { + FIXME(win32,"(%d),stub!\n",hWinSta); + return TRUE; +} + +BOOL32 WINAPI SetUserObjectSecurity( + HANDLE32 hObj, + /*LPSECURITY_INFORMATION*/LPVOID pSIRequested, + /*LPSECURITY_DESCRIPTOR*/LPVOID pSID +) { + FIXME(win32,"(%d,%p,%p),stub!\n",hObj,pSIRequested,pSID); + return TRUE; +} + +/*HDESK*/HANDLE32 WINAPI CreateDesktop32W( + LPWSTR lpszDesktop,LPWSTR lpszDevice,LPDEVMODE32W pDevmode, + DWORD dwFlags,DWORD dwDesiredAccess,LPSECURITY_ATTRIBUTES lpsa +) { + FIXME(win32,"(%s,%s,%p,0x%08lx,0x%08lx,%p),stub!\n", + debugstr_w(lpszDesktop),debugstr_w(lpszDevice),pDevmode, + dwFlags,dwDesiredAccess,lpsa + ); + return 0xcafedead; +} + +DWORD WINAPI SetWindowStationUser(DWORD x1,DWORD x2) { + FIXME(win32,"(%d,%d),stub!\n",x1,x2); + return 1; +}