Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
5267fcca
Commit
5267fcca
authored
Dec 09, 2022
by
Nikolay Sivov
Committed by
Alexandre Julliard
Jan 26, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ktmw32: Use syscall interface for transaction objects stubs.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
parent
470723d7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
133 additions
and
13 deletions
+133
-13
ktmw32_main.c
dlls/ktmw32/ktmw32_main.c
+33
-13
ntdll.spec
dlls/ntdll/ntdll.spec
+3
-0
loader.c
dlls/ntdll/unix/loader.c
+3
-0
sync.c
dlls/ntdll/unix/sync.c
+34
-0
sync.c
dlls/wow64/sync.c
+54
-0
syscall.h
dlls/wow64/syscall.h
+3
-0
winternl.h
include/winternl.h
+3
-0
No files found.
dlls/ktmw32/ktmw32_main.c
View file @
5267fcca
...
...
@@ -22,39 +22,59 @@
#include "windef.h"
#include "winbase.h"
#include "win
e/debug
.h"
#include "win
ternl
.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
option
s
,
DWORD
level
,
DWORD
flags
,
DWORD
timeout
,
LPWSTR
description
)
HANDLE
WINAPI
CreateTransaction
(
SECURITY_ATTRIBUTES
*
sa
,
GUID
*
guid
,
DWORD
options
,
DWORD
level
,
DWORD
flag
s
,
DWORD
timeout
,
WCHAR
*
desc
)
{
ULONG
obj_flags
=
OBJ_CASE_INSENSITIVE
;
UNICODE_STRING
desc_str
;
OBJECT_ATTRIBUTES
attr
;
LARGE_INTEGER
time
;
HANDLE
handle
;
if
(
sa
&&
sa
->
bInheritHandle
)
obj_flags
|=
OBJ_INHERIT
;
InitializeObjectAttributes
(
&
attr
,
NULL
,
obj_flags
,
0
,
sa
?
sa
->
lpSecurityDescriptor
:
NULL
);
RtlInitUnicodeString
(
&
desc_str
,
desc
);
FIXME
(
"(%p %p 0x%lx 0x%lx 0x%lx, %lu, %s): stub
\n
"
,
pattr
,
pguid
,
options
,
level
,
flags
,
timeout
,
debugstr_w
(
description
));
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
)
1
;
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
));
}
dlls/ntdll/ntdll.spec
View file @
5267fcca
...
...
@@ -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
...
...
dlls/ntdll/unix/loader.c
View file @
5267fcca
...
...
@@ -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
,
...
...
dlls/ntdll/unix/sync.c
View file @
5267fcca
...
...
@@ -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
;
}
dlls/wow64/sync.c
View file @
5267fcca
...
...
@@ -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
);
}
dlls/wow64/syscall.h
View file @
5267fcca
...
...
@@ -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 ) \
...
...
include/winternl.h
View file @
5267fcca
...
...
@@ -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
*
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment