mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 18:50:06 +00:00
ktmw32: Use syscall interface for transaction objects stubs.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
parent
470723d70f
commit
5267fccae6
|
@ -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 ));
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
@ -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 ) \
|
||||
|
|
|
@ -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*);
|
||||
|
|
Loading…
Reference in a new issue