Skip to content

Commit

Permalink
Version 2.6
Browse files Browse the repository at this point in the history
  • Loading branch information
Skulltrail192 committed Jul 3, 2022
1 parent 5a61e56 commit 7a7569f
Show file tree
Hide file tree
Showing 14 changed files with 4,402 additions and 124 deletions.
8 changes: 4 additions & 4 deletions wrappers/base/CMakeLists.txt
Expand Up @@ -3,21 +3,21 @@ add_subdirectory(ntext_wrapper)
# add_subdirectory(ntkrnlext)
add_subdirectory(advapi32_wrapper)
add_subdirectory(browseui_wrapper)
add_subdirectory(d3d9_wrapper)
add_subdirectory(pdh_wrapper)
add_subdirectory(gdi32_wrapper)
add_subdirectory(secur32_wrapper)
add_subdirectory(netapi32_wrapper)
add_subdirectory(setupapi_wrapper)
add_subdirectory(shell32_wrapper)
add_subdirectory(shlwapi_wrapper)
add_subdirectory(windowscodecs_wrapper)
add_subdirectory(winsta_wrapper)
add_subdirectory(ole32_wrapper)
add_subdirectory(umpnpmgr_wrapper)
add_subdirectory(rpcrt4_wrapper)
add_subdirectory(iphlpapi_wrapper)
add_subdirectory(powrprof_wrapper)
add_subdirectory(ws2_32_wrapper)
add_subdirectory(user32_wrapper)
add_subdirectory(uxtheme_wrapper)
add_subdirectory(uxtheme_wrapper)
#add_subdirectory(d3d9_wrapper)
# add_subdirectory(windowscodecs_wrapper)
# add_subdirectory(umpnpmgr_wrapper)
104 changes: 53 additions & 51 deletions wrappers/base/advapi32_wrapper/reg.c
Expand Up @@ -611,75 +611,77 @@ RegpCopyTree(IN HKEY hKeySrc,
*
* @implemented
*/
LONG WINAPI
RegCopyTreeW(IN HKEY hKeySrc,
IN LPCWSTR lpSubKey OPTIONAL,
IN HKEY hKeyDest)
LSTATUS WINAPI RegCopyTreeW( HKEY hsrc, const WCHAR *subkey, HKEY hdst )
{
HANDLE DestKeyHandle, KeyHandle, CurKey, SubKeyHandle = NULL;
NTSTATUS Status;
DWORD name_size, max_name;
DWORD value_size, max_value;
DWORD max_subkey, i, type;
WCHAR *name_buf = NULL;
BYTE *value_buf = NULL;
HKEY hkey;
LONG ret;

Status = MapDefaultKey(&KeyHandle,
hKeySrc);
if (!NT_SUCCESS(Status))
TRACE( "(%p, %s, %p)\n", hsrc, debugstr_w(subkey), hdst );

if (subkey)
{
return RtlNtStatusToDosError(Status);
ret = RegOpenKeyExW( hsrc, subkey, 0, KEY_READ, &hsrc );
if (ret) return ret;
}

Status = MapDefaultKey(&DestKeyHandle,
hKeyDest);
if (!NT_SUCCESS(Status))
ret = RegQueryInfoKeyW( hsrc, NULL, NULL, NULL, NULL, &max_subkey,
NULL, NULL, &max_name, &max_value, NULL, NULL );
if (ret)
goto cleanup;

max_name = max( max_subkey, max_name ) + 1;
if (!(name_buf = heap_alloc( max_name * sizeof(WCHAR) )))
{
goto Cleanup2;
ret = ERROR_NOT_ENOUGH_MEMORY;
goto cleanup;
}

if (lpSubKey != NULL)
if (!(value_buf = heap_alloc( max_value )))
{
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING SubKeyName;

RtlInitUnicodeString(&SubKeyName, lpSubKey);

InitializeObjectAttributes(&ObjectAttributes,
&SubKeyName,
OBJ_CASE_INSENSITIVE,
KeyHandle,
NULL);

Status = NtOpenKey(&SubKeyHandle,
KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE,
&ObjectAttributes);
if (!NT_SUCCESS(Status))
{
goto Cleanup;
}

CurKey = SubKeyHandle;
ret = ERROR_NOT_ENOUGH_MEMORY;
goto cleanup;
}
else
CurKey = KeyHandle;

Status = RegpCopyTree(CurKey,
hKeyDest);

if (SubKeyHandle != NULL)
/* Copy values */
for (i = 0;; i++)
{
NtClose(SubKeyHandle);
name_size = max_name;
value_size = max_value;
ret = RegEnumValueW( hsrc, i, name_buf, &name_size, NULL, &type, value_buf, &value_size );
if (ret == ERROR_NO_MORE_ITEMS) break;
if (ret) goto cleanup;
ret = RegSetValueExW( hdst, name_buf, 0, type, value_buf, value_size );
if (ret) goto cleanup;
}

Cleanup:
ClosePredefKey(DestKeyHandle);
Cleanup2:
ClosePredefKey(KeyHandle);

if (!NT_SUCCESS(Status))
/* Recursively copy subkeys */
for (i = 0;; i++)
{
return RtlNtStatusToDosError(Status);
name_size = max_name;
ret = RegEnumKeyExW( hsrc, i, name_buf, &name_size, NULL, NULL, NULL, NULL );
if (ret == ERROR_NO_MORE_ITEMS) break;
if (ret) goto cleanup;
ret = RegCreateKeyExW( hdst, name_buf, 0, NULL, 0, KEY_WRITE, NULL, &hkey, NULL );
if (ret) goto cleanup;
ret = RegCopyTreeW( hsrc, name_buf, hkey );
RegCloseKey( hkey );
if (ret) goto cleanup;
}

return ERROR_SUCCESS;
}
ret = ERROR_SUCCESS;

cleanup:
heap_free( name_buf );
heap_free( value_buf );
if (subkey)
RegCloseKey( hsrc );
return ret;
}

/************************************************************************
* RegCopyTreeA
Expand Down
20 changes: 10 additions & 10 deletions wrappers/base/ntext_wrapper/ntext.spec
Expand Up @@ -18,9 +18,9 @@
@ stdcall CsrFreeCaptureBuffer(ptr)
@ stdcall CsrGetProcessId()
@ stdcall CsrIdentifyAlertableThread()
@ stdcall CsrNewThread()
@ stdcall CsrProbeForRead(ptr long long)
@ stdcall CsrProbeForWrite(ptr long long)
@ stdcall CsrNewThread() ntdll.CsrNewThread
@ stdcall CsrProbeForRead(ptr long long) ntdll.CsrProbeForRead
@ stdcall CsrProbeForWrite(ptr long long) ntdll.CsrProbeForWrite
@ stdcall CsrSetPriorityClass(ptr ptr)
@ stdcall DbgBreakPoint()
@ varargs DbgPrint(str)
Expand All @@ -44,16 +44,16 @@
@ stdcall KiUserApcDispatcher(ptr ptr ptr ptr)
@ stdcall KiUserCallbackDispatcher(ptr ptr long) ; CHECKME
@ stdcall KiUserExceptionDispatcher(ptr ptr)
@ stdcall LdrAccessOutOfProcessResource(ptr ptr ptr ptr ptr)
@ stdcall LdrAccessOutOfProcessResource(ptr ptr ptr ptr ptr) ntdll.LdrAccessOutOfProcessResource
@ stdcall LdrAccessResource(long ptr ptr ptr)
@ stdcall LdrAddRefDll(long ptr)
@ stdcall LdrAlternateResourcesEnabled()
@ stdcall LdrCreateOutOfProcessImage(long ptr ptr ptr)
@ stdcall LdrDestroyOutOfProcessImage(ptr)
@ stdcall LdrCreateOutOfProcessImage(long ptr ptr ptr) ntdll.LdrCreateOutOfProcessImage
@ stdcall LdrDestroyOutOfProcessImage(ptr) ntdll.LdrDestroyOutOfProcessImage
@ stdcall LdrDisableThreadCalloutsForDll(long)
@ stdcall LdrEnumResources(ptr ptr long ptr ptr)
@ stdcall LdrEnumerateLoadedModules(long ptr long)
@ stdcall LdrFindCreateProcessManifest(long ptr ptr long ptr) ; 5.1 and 5.2 only
@ stdcall LdrFindCreateProcessManifest(long ptr ptr long ptr) ntdll.LdrFindCreateProcessManifest
@ stdcall LdrFindEntryForAddress(ptr ptr)
@ stdcall LdrFindResourceDirectory_U(long ptr long ptr)
@ stdcall LdrFindResourceEx_U(long ptr long ptr ptr)
Expand Down Expand Up @@ -536,7 +536,7 @@
@ stdcall RtlEraseUnicodeString(ptr)
@ stdcall RtlExitUserThread(long)
@ stdcall RtlExpandEnvironmentStrings_U(ptr ptr ptr ptr)
@ stdcall RtlExtendHeap(ptr long ptr ptr)
@ stdcall RtlExtendHeap(ptr long ptr ptr) ntdll.RtlExtendHeap
@ stdcall -arch=win32 -ret64 RtlExtendedIntegerMultiply(double long)
@ stdcall -arch=win32 -ret64 RtlExtendedLargeIntegerDivide(double long ptr)
@ stdcall -arch=win32 -ret64 RtlExtendedMagicDivide(double double long)
Expand Down Expand Up @@ -568,7 +568,7 @@
@ stdcall RtlFreeSid(long)
@ stdcall RtlFreeThreadActivationContextStack()
@ stdcall RtlFreeUnicodeString(ptr)
@ stdcall RtlFreeUserThreadStack(ptr ptr) ; 4.0 to 5.2 only
@ stdcall RtlFreeUserThreadStack(ptr ptr) ntdll.RtlFreeUserThreadStack
@ stdcall RtlGUIDFromString(ptr ptr)
@ stdcall RtlGenerate8dot3Name(ptr ptr long ptr)
@ stdcall RtlGetAce(ptr long ptr)
Expand Down Expand Up @@ -835,7 +835,7 @@
@ stdcall RtlUpdateTimer(ptr ptr long long)
@ stdcall RtlUpperChar(long)
@ stdcall RtlUpperString(ptr ptr)
@ stdcall RtlUsageHeap(ptr long ptr)
@ stdcall RtlUsageHeap(ptr long ptr) ntdll.RtlUsageHeap
@ stdcall RtlValidAcl(ptr)
@ stdcall RtlValidRelativeSecurityDescriptor(ptr long long)
@ stdcall RtlValidSecurityDescriptor(ptr)
Expand Down
22 changes: 11 additions & 11 deletions wrappers/base/ntext_wrapper/rtl/synch.c
Expand Up @@ -180,7 +180,7 @@ static HANDLE __fastcall GetGlobalKeyedEventHandle()
RtlRaiseStatus(STATUS_RESOURCE_NOT_OWNED);
}

if (InterlockedCompareExchange((size_t*)&_GlobalKeyedEventHandle, (size_t)KeyedEventHandle, (size_t)0))
if (InterlockedCompareExchange((volatile long *)&_GlobalKeyedEventHandle, (size_t)KeyedEventHandle, (size_t)0))
{
RtlFreeHeap( RtlGetProcessHeap(), 0, KeyedEventHandle );
}
Expand All @@ -200,7 +200,7 @@ static void RtlpWaitOnAddressWakeEntireList(ADDRESS_WAIT_BLOCK* pBlock)
{
ADDRESS_WAIT_BLOCK* Tmp = pBlock->back;

if (InterlockedExchange(&pBlock->flag, 2) == 0)
if (InterlockedExchange((volatile long *)&pBlock->flag, 2) == 0)
{
NtReleaseKeyedEvent(GlobalKeyedEventHandle, pBlock, 0, 0);
}
Expand Down Expand Up @@ -234,7 +234,7 @@ static void RtlpOptimizeWaitOnAddressWaitList(volatile ULONG_PTR* ppFirstBlock)
pItem->notify = Tmp;
}

Last = InterlockedCompareExchange(ppFirstBlock, (Current & 1) == 0 ? (size_t)(pBlock) : 0, Current);
Last = InterlockedCompareExchange((volatile long *)ppFirstBlock, (Current & 1) == 0 ? (size_t)(pBlock) : 0, Current);

if (Last == Current)
{
Expand Down Expand Up @@ -276,7 +276,7 @@ static void RtlpAddWaitBlockToWaitList(ADDRESS_WAIT_BLOCK* pWaitBlock)
pWaitBlock->next = pWaitBlock;
}

Last = InterlockedCompareExchange(ppFirstBlock, New, Current);
Last = InterlockedCompareExchange((volatile long *)ppFirstBlock, New, Current);

if (Last == Current)
{
Expand Down Expand Up @@ -365,7 +365,7 @@ RtlpWaitOnAddressWithTimeout(

if (Status == STATUS_TIMEOUT)
{
if (InterlockedExchange(&pWaitBlock->flag, 4) == 2)
if (InterlockedExchange((volatile long *)&pWaitBlock->flag, 4) == 2)
{
Status = NtWaitForKeyedEvent(GlobalKeyedEventHandle, pWaitBlock, 0, 0);
}
Expand Down Expand Up @@ -396,15 +396,15 @@ static void RtlpWaitOnAddressRemoveWaitBlock(ADDRESS_WAIT_BLOCK* pWaitBlock)
{
if (Current & 2)
{
Last = InterlockedCompareExchange(ppFirstBlock, Current | 1, Current);
Last = InterlockedCompareExchange((volatile long *)ppFirstBlock, Current | 1, Current);

if (Last == Current)
{
break;
}
}else{
New = Current | 0x2;
Last = InterlockedCompareExchange(ppFirstBlock, New, Current);
Last = InterlockedCompareExchange((volatile long *)ppFirstBlock, New, Current);

if (Last == Current)
{
Expand Down Expand Up @@ -455,7 +455,7 @@ static void RtlpWaitOnAddressRemoveWaitBlock(ADDRESS_WAIT_BLOCK* pWaitBlock)
New = (size_t)(Tmp) ^ (Current ^ (size_t)(Tmp)) & 0x3;
}

Last = InterlockedCompareExchange(ppFirstBlock, New, Current);
Last = InterlockedCompareExchange((volatile long *)ppFirstBlock, New, Current);

if (Last == Current)
{
Expand All @@ -476,7 +476,7 @@ static void RtlpWaitOnAddressRemoveWaitBlock(ADDRESS_WAIT_BLOCK* pWaitBlock)
} while (pBlock);


if (bFind == FALSE && InterlockedExchange(&pWaitBlock->flag, 0) != 2)
if (bFind == FALSE && InterlockedExchange((volatile long *)&pWaitBlock->flag, 0) != 2)
{
NtWaitForKeyedEvent(GlobalKeyedEventHandle, pWaitBlock, 0, 0);
}
Expand All @@ -485,7 +485,7 @@ static void RtlpWaitOnAddressRemoveWaitBlock(ADDRESS_WAIT_BLOCK* pWaitBlock)

for (;;)
{
Last = InterlockedCompareExchange(ppFirstBlock, (Current & 1) == 0 ? (size_t)(ADDRESS_GET_BLOCK(Current)) : 0, Current);
Last = InterlockedCompareExchange((volatile long *)ppFirstBlock, (Current & 1) == 0 ? (size_t)(ADDRESS_GET_BLOCK(Current)) : 0, Current);

if (Last == Current)
break;
Expand All @@ -502,7 +502,7 @@ static void RtlpWaitOnAddressRemoveWaitBlock(ADDRESS_WAIT_BLOCK* pWaitBlock)
}
}

if (InterlockedExchange(&pWaitBlock->flag, 1) == 2)
if (InterlockedExchange((volatile long *)&pWaitBlock->flag, 1) == 2)
return;

RtlpWaitOnAddressWithTimeout(pWaitBlock, 0);
Expand Down
10 changes: 8 additions & 2 deletions wrappers/base/ole32_wrapper/ole32_wrapper.spec
Expand Up @@ -52,7 +52,7 @@
@ stdcall CoGetPSClsid(ptr ptr)
@ stdcall CoGetProcessIdentifier(ptr) olebase.CoGetProcessIdentifier
@ stdcall CoGetStandardMarshal(ptr ptr long ptr long ptr)
@ stdcall CoGetState(ptr)
@ stdcall CoGetState(ptr) olebase.CoGetState
@ stdcall CoGetStdMarshalEx(ptr long ptr)
@ stdcall CoGetSystemSecurityPermissions(long ptr) olebase.CoGetSystemSecurityPermissions
@ stdcall CoGetTreatAsClass(ptr ptr)
Expand Down Expand Up @@ -425,4 +425,10 @@
@ stdcall -arch=x86_64 WdtpInterfacePointer_UserFree64(ptr) olebase.WdtpInterfacePointer_UserFree64
@ stdcall -arch=x86_64 WdtpInterfacePointer_UserMarshal64(ptr long ptr ptr ptr) olebase.WdtpInterfacePointer_UserMarshal64
@ stdcall -arch=x86_64 WdtpInterfacePointer_UserSize64(ptr long ptr long ptr) olebase.WdtpInterfacePointer_UserSize64
@ stdcall -arch=x86_64 WdtpInterfacePointer_UserUnmarshal64(ptr ptr ptr ptr) olebase.WdtpInterfacePointer_UserUnmarshal64
@ stdcall -arch=x86_64 WdtpInterfacePointer_UserUnmarshal64(ptr ptr ptr ptr) olebase.WdtpInterfacePointer_UserUnmarshal64

#For Vista Compatibility
@ stdcall HRGN_UserFree(ptr ptr) olebase.HRGN_UserFree
@ stdcall HRGN_UserMarshal(ptr ptr ptr) olebase.HRGN_UserMarshal
@ stdcall HRGN_UserSize(ptr long ptr) olebase.HRGN_UserSize
@ stdcall HRGN_UserUnmarshal(ptr ptr ptr) olebase.HRGN_UserUnmarshal
11 changes: 6 additions & 5 deletions wrappers/base/shell32_wrapper/CMakeLists.txt
@@ -1,11 +1,10 @@
set_cpp(WITH_RUNTIME)

remove_definitions(-D_WIN32_WINNT=0x502)
add_definitions(-D_WIN32_WINNT=0x600)

include_directories(${REACTOS_SOURCE_DIR}/include)
include_directories(${REACTOS_SOURCE_DIR}/include/sdk/lib/atl)
include_directories(${REACTOS_SOURCE_DIR}/include/sdk/psdk)
include_directories(${REACTOS_SOURCE_DIR}/sdk/include)
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/atl)
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/psdk)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/sdk/include/psdk)
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine)
include_directories(${REACTOS_SOURCE_DIR}/wrappers/dependencies/propsys)
include_directories(${REACTOS_SOURCE_DIR}/wrappers/dependencies/shellbase)
Expand All @@ -25,6 +24,7 @@ list(APPEND SOURCE
shlmenu.c
shlview_cmenu.c
unimplemented.c
precomp.h
version.rc
${CMAKE_CURRENT_BINARY_DIR}/shell32_wrapper_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/shell32_wrapper.def)
Expand All @@ -34,5 +34,6 @@ add_library(shell32_wrapper SHARED ${SOURCE})

set_module_type(shell32_wrapper win32dll ENTRYPOINT 0)
target_link_libraries(shell32_wrapper wine uuid)
#add_pch(shell32_wrapper precomp.h SOURCE)
add_importlibs(shell32_wrapper advapi32 user32 msvcrt kernel32 ntdll shellbase shlwapi secur32 ole32 netapi32 rpcrt4 propsys comctl32 userenv gdi32 browseui version)
add_cd_file(TARGET shell32_wrapper DESTINATION reactos/system32 FOR all)
9 changes: 8 additions & 1 deletion wrappers/base/shell32_wrapper/main.h
Expand Up @@ -35,7 +35,6 @@
#include <secext.h>
#include <Lmaccess.h>
#include <Lmapibuf.h>
#include <propsys_private.h>
#include <objbase.h>
#include <rpcproxy.h>
#include <security.h>
Expand All @@ -59,6 +58,14 @@
#include <commdlg.h>
#include <wine/heap.h>

#define WIN32_NO_STATUS
#define _INC_WINDOWS
#define COM_NO_WINDOWS_H

#define COBJMACROS
#define NONAMELESSUNION
#include "propsys.h"

//DEFINITIONS
#define IDS_DESKTOP 20
#define CP_UNIXCP 65010
Expand Down

0 comments on commit 7a7569f

Please sign in to comment.