1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-08 03:45:57 +00:00

ktmw32: Use syscall interface for transaction objects stubs.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
Nikolay Sivov 2022-12-09 20:05:15 +03:00 committed by Alexandre Julliard
parent 470723d70f
commit 5267fccae6
7 changed files with 133 additions and 13 deletions

View File

@ -22,39 +22,59 @@
#include "windef.h"
#include "winbase.h"
#include "wine/debug.h"
#include "winternl.h"
WINE_DEFAULT_DEBUG_CHANNEL(ktmw32);
static inline BOOL set_ntstatus( NTSTATUS status )
{
if (status) RtlSetLastWin32Error( RtlNtStatusToDosError( status ));
return !status;
}
static inline LARGE_INTEGER *get_nt_timeout( LARGE_INTEGER *time, DWORD timeout )
{
if (timeout == INFINITE) return NULL;
time->QuadPart = (ULONGLONG)timeout * -10000;
return time;
}
/***********************************************************************
* CommitTransaction (ktmw32.@)
*/
BOOL WINAPI CommitTransaction(HANDLE transaction)
{
FIXME("(%p): stub\n", transaction);
return TRUE;
return set_ntstatus( NtCommitTransaction( transaction, TRUE ));
}
/***********************************************************************
* CreateTransaction (ktmw32.@)
*/
HANDLE WINAPI CreateTransaction(LPSECURITY_ATTRIBUTES pattr, LPGUID pguid, DWORD options,
DWORD level, DWORD flags, DWORD timeout, LPWSTR description)
HANDLE WINAPI CreateTransaction( SECURITY_ATTRIBUTES *sa, GUID *guid, DWORD options, DWORD level, DWORD flags,
DWORD timeout, WCHAR *desc )
{
ULONG obj_flags = OBJ_CASE_INSENSITIVE;
UNICODE_STRING desc_str;
OBJECT_ATTRIBUTES attr;
LARGE_INTEGER time;
HANDLE handle;
FIXME("(%p %p 0x%lx 0x%lx 0x%lx, %lu, %s): stub\n",
pattr, pguid, options, level, flags, timeout, debugstr_w(description));
if (sa && sa->bInheritHandle) obj_flags |= OBJ_INHERIT;
InitializeObjectAttributes( &attr, NULL, obj_flags, 0, sa ? sa->lpSecurityDescriptor : NULL );
return (HANDLE) 1;
RtlInitUnicodeString( &desc_str, desc );
if (!set_ntstatus( NtCreateTransaction( &handle, 0 /* FIXME */, &attr, guid, NULL, options, level, flags,
get_nt_timeout( &time, timeout ), &desc_str )))
{
return INVALID_HANDLE_VALUE;
}
return handle;
}
/***********************************************************************
* Rollback Transaction (ktmw32.@)
* RollbackTransaction (ktmw32.@)
*/
BOOL WINAPI RollbackTransaction(HANDLE transaction)
{
FIXME("stub: %p\n", transaction);
SetLastError(ERROR_ACCESS_DENIED);
return FALSE;
return set_ntstatus( NtRollbackTransaction( transaction, TRUE ));
}

View File

@ -158,6 +158,7 @@
@ stdcall -syscall NtClearEvent(long)
@ stdcall -syscall NtClose(long)
# @ stub NtCloseObjectAuditAlarm
@ stdcall -syscall NtCommitTransaction(long long)
# @ stub NtCompactKeys
@ stdcall -syscall NtCompareObjects(ptr ptr)
# @ stub NtCompareTokens
@ -192,6 +193,7 @@
@ stdcall -syscall NtCreateThreadEx(ptr long ptr long ptr ptr long long long long ptr)
@ stdcall -syscall NtCreateTimer(ptr long ptr long)
# @ stub NtCreateToken
@ stdcall -syscall NtCreateTransaction(ptr long ptr ptr long long long long ptr ptr)
@ stdcall -syscall NtCreateUserProcess(ptr ptr long long ptr ptr long long ptr ptr ptr)
# @ stub NtCreateWaitablePort
@ stdcall -arch=i386,arm64 NtCurrentTeb()
@ -365,6 +367,7 @@
@ stdcall -syscall NtRestoreKey(long long long)
@ stdcall -syscall NtResumeProcess(long)
@ stdcall -syscall NtResumeThread(long ptr)
@ stdcall -syscall NtRollbackTransaction(long long)
@ stdcall -syscall NtSaveKey(long long)
# @ stub NtSaveKeyEx
# @ stub NtSaveMergedKeys

View File

@ -143,6 +143,7 @@ static void * const syscalls[] =
NtCancelTimer,
NtClearEvent,
NtClose,
NtCommitTransaction,
NtCompareObjects,
NtCompleteConnectPort,
NtConnectPort,
@ -168,6 +169,7 @@ static void * const syscalls[] =
NtCreateThread,
NtCreateThreadEx,
NtCreateTimer,
NtCreateTransaction,
NtCreateUserProcess,
NtDebugActiveProcess,
NtDebugContinue,
@ -296,6 +298,7 @@ static void * const syscalls[] =
NtRestoreKey,
NtResumeProcess,
NtResumeThread,
NtRollbackTransaction,
NtSaveKey,
NtSecureConnectPort,
NtSetContextThread,

View File

@ -2561,3 +2561,37 @@ void set_async_direct_result( HANDLE *async_handle, NTSTATUS status, ULONG_PTR i
return;
}
/***********************************************************************
* NtCreateTransaction (NTDLL.@)
*/
NTSTATUS WINAPI NtCreateTransaction( HANDLE *handle, ACCESS_MASK mask, OBJECT_ATTRIBUTES *obj_attr, GUID *guid, HANDLE tm,
ULONG options, ULONG isol_level, ULONG isol_flags, PLARGE_INTEGER timeout, UNICODE_STRING *description )
{
FIXME( "%p, %#x, %p, %s, %p, 0x%08x, 0x%08x, 0x%08x, %p, %p stub.\n", handle, (int)mask, obj_attr, debugstr_guid(guid), tm,
(int)options, (int)isol_level, (int)isol_flags, timeout, description );
*handle = ULongToHandle(1);
return STATUS_SUCCESS;
}
/***********************************************************************
* NtCommitTransaction (NTDLL.@)
*/
NTSTATUS WINAPI NtCommitTransaction( HANDLE transaction, BOOLEAN wait )
{
FIXME( "%p, %d stub.\n", transaction, wait );
return STATUS_SUCCESS;
}
/***********************************************************************
* NtRollbackTransaction (NTDLL.@)
*/
NTSTATUS WINAPI NtRollbackTransaction( HANDLE transaction, BOOLEAN wait )
{
FIXME( "%p, %d stub.\n", transaction, wait );
return STATUS_ACCESS_VIOLATION;
}

View File

@ -1617,3 +1617,57 @@ NTSTATUS WINAPI wow64_NtYieldExecution( UINT *args )
{
return NtYieldExecution();
}
/**********************************************************************
* wow64_NtCreateTransaction
*/
NTSTATUS WINAPI wow64_NtCreateTransaction( UINT *args )
{
ULONG *handle_ptr = get_ptr( &args );
ACCESS_MASK access = get_ulong( &args );
OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args );
GUID *guid = get_ptr( &args );
HANDLE tm = get_handle( &args );
ULONG options = get_ulong( &args );
ULONG isol_level = get_ulong( &args );
ULONG isol_flags = get_ulong( &args );
LARGE_INTEGER *timeout = get_ptr( &args );
UNICODE_STRING32 *desc32 = get_ptr( &args );
struct object_attr64 attr;
UNICODE_STRING desc;
HANDLE handle = 0;
NTSTATUS status;
*handle_ptr = 0;
status = NtCreateTransaction( &handle, access, objattr_32to64( &attr, attr32 ), guid, tm, options,
isol_level, isol_flags, timeout, unicode_str_32to64( &desc, desc32 ));
put_handle( handle_ptr, handle );
return status;
}
/**********************************************************************
* wow64_NtCommitTransaction
*/
NTSTATUS WINAPI wow64_NtCommitTransaction( UINT *args )
{
HANDLE handle = get_handle( &args );
BOOLEAN wait = get_ulong( &args );
return NtCommitTransaction( handle, wait );
}
/**********************************************************************
* wow64_NtRollbackTransaction
*/
NTSTATUS WINAPI wow64_NtRollbackTransaction( UINT *args )
{
HANDLE handle = get_handle( &args );
BOOLEAN wait = get_ulong( &args );
return NtRollbackTransaction( handle, wait );
}

View File

@ -44,6 +44,7 @@
SYSCALL_ENTRY( NtCancelTimer ) \
SYSCALL_ENTRY( NtClearEvent ) \
SYSCALL_ENTRY( NtClose ) \
SYSCALL_ENTRY( NtCommitTransaction ) \
SYSCALL_ENTRY( NtCompareObjects ) \
SYSCALL_ENTRY( NtCompleteConnectPort ) \
SYSCALL_ENTRY( NtConnectPort ) \
@ -69,6 +70,7 @@
SYSCALL_ENTRY( NtCreateThread ) \
SYSCALL_ENTRY( NtCreateThreadEx ) \
SYSCALL_ENTRY( NtCreateTimer ) \
SYSCALL_ENTRY( NtCreateTransaction ) \
SYSCALL_ENTRY( NtCreateUserProcess ) \
SYSCALL_ENTRY( NtDebugActiveProcess ) \
SYSCALL_ENTRY( NtDebugContinue ) \
@ -197,6 +199,7 @@
SYSCALL_ENTRY( NtRestoreKey ) \
SYSCALL_ENTRY( NtResumeProcess ) \
SYSCALL_ENTRY( NtResumeThread ) \
SYSCALL_ENTRY( NtRollbackTransaction ) \
SYSCALL_ENTRY( NtSaveKey ) \
SYSCALL_ENTRY( NtSecureConnectPort ) \
SYSCALL_ENTRY( NtSetContextThread ) \

View File

@ -3983,6 +3983,7 @@ NTSYSAPI NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
NTSYSAPI NTSTATUS WINAPI NtClearEvent(HANDLE);
NTSYSAPI NTSTATUS WINAPI NtClose(HANDLE);
NTSYSAPI NTSTATUS WINAPI NtCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
NTSYSAPI NTSTATUS WINAPI NtCommitTransaction(HANDLE,BOOLEAN);
NTSYSAPI NTSTATUS WINAPI NtCompareObjects(HANDLE,HANDLE);
NTSYSAPI NTSTATUS WINAPI NtCompleteConnectPort(HANDLE);
NTSYSAPI NTSTATUS WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
@ -4012,6 +4013,7 @@ NTSYSAPI NTSTATUS WINAPI NtCreateThread(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,
NTSYSAPI NTSTATUS WINAPI NtCreateThreadEx(HANDLE*,ACCESS_MASK,OBJECT_ATTRIBUTES*,HANDLE,PRTL_THREAD_START_ROUTINE,void*,ULONG,ULONG_PTR,SIZE_T,SIZE_T,PS_ATTRIBUTE_LIST*);
NTSYSAPI NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
NTSYSAPI NTSTATUS WINAPI NtCreateToken(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,TOKEN_TYPE,PLUID,PLARGE_INTEGER,PTOKEN_USER,PTOKEN_GROUPS,PTOKEN_PRIVILEGES,PTOKEN_OWNER,PTOKEN_PRIMARY_GROUP,PTOKEN_DEFAULT_DACL,PTOKEN_SOURCE);
NTSYSAPI NTSTATUS WINAPI NtCreateTransaction(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,LPGUID,HANDLE,ULONG,ULONG,ULONG,PLARGE_INTEGER,PUNICODE_STRING);
NTSYSAPI NTSTATUS WINAPI NtCreateUserProcess(HANDLE*,HANDLE*,ACCESS_MASK,ACCESS_MASK,OBJECT_ATTRIBUTES*,OBJECT_ATTRIBUTES*,ULONG,ULONG,RTL_USER_PROCESS_PARAMETERS*,PS_CREATE_INFO*,PS_ATTRIBUTE_LIST*);
NTSYSAPI NTSTATUS WINAPI NtDebugActiveProcess(HANDLE,HANDLE);
NTSYSAPI NTSTATUS WINAPI NtDebugContinue(HANDLE,CLIENT_ID*,NTSTATUS);
@ -4159,6 +4161,7 @@ NTSYSAPI NTSTATUS WINAPI NtResetWriteWatch(HANDLE,PVOID,SIZE_T);
NTSYSAPI NTSTATUS WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG);
NTSYSAPI NTSTATUS WINAPI NtResumeProcess(HANDLE);
NTSYSAPI NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
NTSYSAPI NTSTATUS WINAPI NtRollbackTransaction(HANDLE,BOOLEAN);
NTSYSAPI NTSTATUS WINAPI NtSaveKey(HANDLE,HANDLE);
NTSYSAPI NTSTATUS WINAPI NtSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
NTSYSAPI NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);