wow64: Add thunks for the directory object syscalls.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
fb5eae4a70
commit
994e4fba75
|
@ -31,4 +31,10 @@ typedef struct
|
||||||
ULONG SecurityQualityOfService;
|
ULONG SecurityQualityOfService;
|
||||||
} OBJECT_ATTRIBUTES32;
|
} OBJECT_ATTRIBUTES32;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
UNICODE_STRING32 ObjectName;
|
||||||
|
UNICODE_STRING32 ObjectTypeName;
|
||||||
|
} DIRECTORY_BASIC_INFORMATION32;
|
||||||
|
|
||||||
#endif /* __WOW64_STRUCT32_H */
|
#endif /* __WOW64_STRUCT32_H */
|
||||||
|
|
|
@ -27,6 +27,9 @@
|
||||||
#include "winnt.h"
|
#include "winnt.h"
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
#include "wow64_private.h"
|
#include "wow64_private.h"
|
||||||
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
WINE_DEFAULT_DEBUG_CHANNEL(wow);
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
@ -52,6 +55,26 @@ NTSTATUS WINAPI wow64_NtClearEvent( UINT *args )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* wow64_NtCreateDirectoryObject
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI wow64_NtCreateDirectoryObject( UINT *args )
|
||||||
|
{
|
||||||
|
ULONG *handle_ptr = get_ptr( &args );
|
||||||
|
ACCESS_MASK access = get_ulong( &args );
|
||||||
|
OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args );
|
||||||
|
|
||||||
|
struct object_attr64 attr;
|
||||||
|
HANDLE handle = 0;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
|
*handle_ptr = 0;
|
||||||
|
status = NtCreateDirectoryObject( &handle, access, objattr_32to64( &attr, attr32 ));
|
||||||
|
put_handle( handle_ptr, handle );
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* wow64_NtCreateEvent
|
* wow64_NtCreateEvent
|
||||||
*/
|
*/
|
||||||
|
@ -159,6 +182,26 @@ NTSTATUS WINAPI wow64_NtCreateTimer( UINT *args )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* wow64_NtOpenDirectoryObject
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI wow64_NtOpenDirectoryObject( UINT *args )
|
||||||
|
{
|
||||||
|
ULONG *handle_ptr = get_ptr( &args );
|
||||||
|
ACCESS_MASK access = get_ulong( &args );
|
||||||
|
OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args );
|
||||||
|
|
||||||
|
struct object_attr64 attr;
|
||||||
|
HANDLE handle = 0;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
|
*handle_ptr = 0;
|
||||||
|
status = NtOpenDirectoryObject( &handle, access, objattr_32to64( &attr, attr32 ));
|
||||||
|
put_handle( handle_ptr, handle );
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* wow64_NtOpenEvent
|
* wow64_NtOpenEvent
|
||||||
*/
|
*/
|
||||||
|
@ -271,6 +314,43 @@ NTSTATUS WINAPI wow64_NtPulseEvent( UINT *args )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* wow64_NtQueryDirectoryObject
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI wow64_NtQueryDirectoryObject( UINT *args )
|
||||||
|
{
|
||||||
|
HANDLE handle = get_handle( &args );
|
||||||
|
DIRECTORY_BASIC_INFORMATION32 *info32 = get_ptr( &args );
|
||||||
|
ULONG size32 = get_ulong( &args );
|
||||||
|
BOOLEAN single_entry = get_ulong( &args );
|
||||||
|
BOOLEAN restart = get_ulong( &args );
|
||||||
|
ULONG *context = get_ptr( &args );
|
||||||
|
ULONG *retlen = get_ptr( &args );
|
||||||
|
|
||||||
|
NTSTATUS status;
|
||||||
|
DIRECTORY_BASIC_INFORMATION *info;
|
||||||
|
ULONG size = size32 + sizeof(*info) - sizeof(*info32);
|
||||||
|
|
||||||
|
if (!single_entry) FIXME( "not implemented\n" );
|
||||||
|
info = RtlAllocateHeap( GetProcessHeap(), 0, size );
|
||||||
|
status = NtQueryDirectoryObject( handle, info, size, single_entry, restart, context, NULL );
|
||||||
|
if (!status)
|
||||||
|
{
|
||||||
|
info32->ObjectName.Buffer = PtrToUlong( info32 + 1 );
|
||||||
|
info32->ObjectName.Length = info->ObjectName.Length;
|
||||||
|
info32->ObjectName.MaximumLength = info->ObjectName.MaximumLength;
|
||||||
|
info32->ObjectTypeName.Buffer = info32->ObjectName.Buffer + info->ObjectName.MaximumLength;
|
||||||
|
info32->ObjectTypeName.Length = info->ObjectTypeName.Length;
|
||||||
|
info32->ObjectTypeName.MaximumLength = info->ObjectTypeName.MaximumLength;
|
||||||
|
size = info->ObjectName.MaximumLength + info->ObjectTypeName.MaximumLength;
|
||||||
|
memcpy( info32 + 1, info + 1, size );
|
||||||
|
if (retlen) *retlen = sizeof(*info32) + size;
|
||||||
|
}
|
||||||
|
RtlFreeHeap( GetProcessHeap(), 0, info );
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* wow64_NtQueryEvent
|
* wow64_NtQueryEvent
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
SYSCALL_ENTRY( NtCancelTimer ) \
|
SYSCALL_ENTRY( NtCancelTimer ) \
|
||||||
SYSCALL_ENTRY( NtClearEvent ) \
|
SYSCALL_ENTRY( NtClearEvent ) \
|
||||||
SYSCALL_ENTRY( NtClose ) \
|
SYSCALL_ENTRY( NtClose ) \
|
||||||
|
SYSCALL_ENTRY( NtCreateDirectoryObject ) \
|
||||||
SYSCALL_ENTRY( NtCreateEvent ) \
|
SYSCALL_ENTRY( NtCreateEvent ) \
|
||||||
SYSCALL_ENTRY( NtCreateKeyedEvent ) \
|
SYSCALL_ENTRY( NtCreateKeyedEvent ) \
|
||||||
SYSCALL_ENTRY( NtCreateMutant ) \
|
SYSCALL_ENTRY( NtCreateMutant ) \
|
||||||
|
@ -36,6 +37,7 @@
|
||||||
SYSCALL_ENTRY( NtDeleteAtom ) \
|
SYSCALL_ENTRY( NtDeleteAtom ) \
|
||||||
SYSCALL_ENTRY( NtFindAtom ) \
|
SYSCALL_ENTRY( NtFindAtom ) \
|
||||||
SYSCALL_ENTRY( NtGetCurrentProcessorNumber ) \
|
SYSCALL_ENTRY( NtGetCurrentProcessorNumber ) \
|
||||||
|
SYSCALL_ENTRY( NtOpenDirectoryObject ) \
|
||||||
SYSCALL_ENTRY( NtOpenEvent ) \
|
SYSCALL_ENTRY( NtOpenEvent ) \
|
||||||
SYSCALL_ENTRY( NtOpenKeyedEvent ) \
|
SYSCALL_ENTRY( NtOpenKeyedEvent ) \
|
||||||
SYSCALL_ENTRY( NtOpenMutant ) \
|
SYSCALL_ENTRY( NtOpenMutant ) \
|
||||||
|
@ -44,6 +46,7 @@
|
||||||
SYSCALL_ENTRY( NtPulseEvent ) \
|
SYSCALL_ENTRY( NtPulseEvent ) \
|
||||||
SYSCALL_ENTRY( NtQueryDefaultLocale ) \
|
SYSCALL_ENTRY( NtQueryDefaultLocale ) \
|
||||||
SYSCALL_ENTRY( NtQueryDefaultUILanguage ) \
|
SYSCALL_ENTRY( NtQueryDefaultUILanguage ) \
|
||||||
|
SYSCALL_ENTRY( NtQueryDirectoryObject ) \
|
||||||
SYSCALL_ENTRY( NtQueryEvent ) \
|
SYSCALL_ENTRY( NtQueryEvent ) \
|
||||||
SYSCALL_ENTRY( NtQueryInformationAtom ) \
|
SYSCALL_ENTRY( NtQueryInformationAtom ) \
|
||||||
SYSCALL_ENTRY( NtQueryInstallUILanguage ) \
|
SYSCALL_ENTRY( NtQueryInstallUILanguage ) \
|
||||||
|
|
Loading…
Reference in New Issue