ntdll: Move more object manager functions to the Unix library.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
28bf959c5c
commit
76e48978a9
|
@ -159,7 +159,7 @@
|
||||||
@ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr)
|
@ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||||
@ stdcall -syscall NtContinue(ptr long)
|
@ stdcall -syscall NtContinue(ptr long)
|
||||||
# @ stub NtCreateDebugObject
|
# @ stub NtCreateDebugObject
|
||||||
@ stdcall NtCreateDirectoryObject(ptr long ptr)
|
@ stdcall -syscall NtCreateDirectoryObject(ptr long ptr)
|
||||||
@ stdcall -syscall NtCreateEvent(ptr long ptr long long)
|
@ stdcall -syscall NtCreateEvent(ptr long ptr long long)
|
||||||
@ stub NtCreateEventPair
|
@ stub NtCreateEventPair
|
||||||
@ stdcall -syscall NtCreateFile(ptr long ptr ptr ptr long long long long ptr long)
|
@ stdcall -syscall NtCreateFile(ptr long ptr ptr ptr long long long long ptr long)
|
||||||
|
@ -181,7 +181,7 @@
|
||||||
@ stub NtCreateProfile
|
@ stub NtCreateProfile
|
||||||
@ stdcall -syscall NtCreateSection(ptr long ptr ptr long long long)
|
@ stdcall -syscall NtCreateSection(ptr long ptr ptr long long long)
|
||||||
@ stdcall -syscall NtCreateSemaphore(ptr long ptr long long)
|
@ stdcall -syscall NtCreateSemaphore(ptr long ptr long long)
|
||||||
@ stdcall NtCreateSymbolicLinkObject(ptr long ptr ptr)
|
@ stdcall -syscall NtCreateSymbolicLinkObject(ptr long ptr ptr)
|
||||||
@ stub NtCreateThread
|
@ stub NtCreateThread
|
||||||
@ stdcall -syscall NtCreateThreadEx(ptr long ptr long ptr ptr long long long long ptr)
|
@ stdcall -syscall NtCreateThreadEx(ptr long ptr long ptr ptr long long long long ptr)
|
||||||
@ stdcall -syscall NtCreateTimer(ptr long ptr long)
|
@ stdcall -syscall NtCreateTimer(ptr long ptr long)
|
||||||
|
@ -242,7 +242,7 @@
|
||||||
# @ stub NtLockRegistryKey
|
# @ stub NtLockRegistryKey
|
||||||
@ stdcall -syscall NtLockVirtualMemory(long ptr ptr long)
|
@ stdcall -syscall NtLockVirtualMemory(long ptr ptr long)
|
||||||
# @ stub NtMakePermanentObject
|
# @ stub NtMakePermanentObject
|
||||||
@ stdcall NtMakeTemporaryObject(long)
|
@ stdcall -syscall NtMakeTemporaryObject(long)
|
||||||
# @ stub NtMapUserPhysicalPages
|
# @ stub NtMapUserPhysicalPages
|
||||||
# @ stub NtMapUserPhysicalPagesScatter
|
# @ stub NtMapUserPhysicalPagesScatter
|
||||||
@ stdcall -syscall NtMapViewOfSection(long long ptr long long ptr ptr long long long)
|
@ stdcall -syscall NtMapViewOfSection(long long ptr long long ptr ptr long long long)
|
||||||
|
@ -250,7 +250,7 @@
|
||||||
@ stdcall -syscall NtNotifyChangeDirectoryFile(long long ptr ptr ptr ptr long long long)
|
@ stdcall -syscall NtNotifyChangeDirectoryFile(long long ptr ptr ptr ptr long long long)
|
||||||
@ stdcall -syscall NtNotifyChangeKey(long long ptr ptr ptr long long ptr long long)
|
@ stdcall -syscall NtNotifyChangeKey(long long ptr ptr ptr long long ptr long long)
|
||||||
@ stdcall -syscall NtNotifyChangeMultipleKeys(long long ptr long ptr ptr ptr long long ptr long long)
|
@ stdcall -syscall NtNotifyChangeMultipleKeys(long long ptr long ptr ptr ptr long long ptr long long)
|
||||||
@ stdcall NtOpenDirectoryObject(ptr long ptr)
|
@ stdcall -syscall NtOpenDirectoryObject(ptr long ptr)
|
||||||
@ stdcall -syscall NtOpenEvent(ptr long ptr)
|
@ stdcall -syscall NtOpenEvent(ptr long ptr)
|
||||||
@ stub NtOpenEventPair
|
@ stub NtOpenEventPair
|
||||||
@ stdcall -syscall NtOpenFile(ptr long ptr ptr long long)
|
@ stdcall -syscall NtOpenFile(ptr long ptr ptr long long)
|
||||||
|
@ -268,7 +268,7 @@
|
||||||
@ stdcall NtOpenProcessTokenEx(long long long ptr)
|
@ stdcall NtOpenProcessTokenEx(long long long ptr)
|
||||||
@ stdcall -syscall NtOpenSection(ptr long ptr)
|
@ stdcall -syscall NtOpenSection(ptr long ptr)
|
||||||
@ stdcall -syscall NtOpenSemaphore(ptr long ptr)
|
@ stdcall -syscall NtOpenSemaphore(ptr long ptr)
|
||||||
@ stdcall NtOpenSymbolicLinkObject (ptr long ptr)
|
@ stdcall -syscall NtOpenSymbolicLinkObject (ptr long ptr)
|
||||||
@ stdcall -syscall NtOpenThread(ptr long ptr ptr)
|
@ stdcall -syscall NtOpenThread(ptr long ptr ptr)
|
||||||
@ stdcall NtOpenThreadToken(long long long ptr)
|
@ stdcall NtOpenThreadToken(long long long ptr)
|
||||||
@ stdcall NtOpenThreadTokenEx(long long long long ptr)
|
@ stdcall NtOpenThreadTokenEx(long long long long ptr)
|
||||||
|
@ -287,7 +287,7 @@
|
||||||
@ stdcall NtQueryDefaultLocale(long ptr)
|
@ stdcall NtQueryDefaultLocale(long ptr)
|
||||||
@ stdcall NtQueryDefaultUILanguage(ptr)
|
@ stdcall NtQueryDefaultUILanguage(ptr)
|
||||||
@ stdcall -syscall NtQueryDirectoryFile(long long ptr ptr ptr ptr long long long ptr long)
|
@ stdcall -syscall NtQueryDirectoryFile(long long ptr ptr ptr ptr long long long ptr long)
|
||||||
@ stdcall NtQueryDirectoryObject(long ptr long long long ptr ptr)
|
@ stdcall -syscall NtQueryDirectoryObject(long ptr long long long ptr ptr)
|
||||||
@ stdcall -syscall NtQueryEaFile(long ptr ptr long long ptr long ptr long)
|
@ stdcall -syscall NtQueryEaFile(long ptr ptr long long ptr long ptr long)
|
||||||
@ stdcall -syscall NtQueryEvent(long long ptr long ptr)
|
@ stdcall -syscall NtQueryEvent(long long ptr long ptr)
|
||||||
@ stdcall -syscall NtQueryFullAttributesFile(ptr ptr)
|
@ stdcall -syscall NtQueryFullAttributesFile(ptr ptr)
|
||||||
|
@ -313,7 +313,7 @@
|
||||||
@ stdcall -syscall NtQuerySection(long long ptr long ptr)
|
@ stdcall -syscall NtQuerySection(long long ptr long ptr)
|
||||||
@ stdcall NtQuerySecurityObject(long long ptr long ptr)
|
@ stdcall NtQuerySecurityObject(long long ptr long ptr)
|
||||||
@ stdcall -syscall NtQuerySemaphore (long long ptr long ptr)
|
@ stdcall -syscall NtQuerySemaphore (long long ptr long ptr)
|
||||||
@ stdcall NtQuerySymbolicLinkObject(long ptr ptr)
|
@ stdcall -syscall NtQuerySymbolicLinkObject(long ptr ptr)
|
||||||
@ stdcall NtQuerySystemEnvironmentValue(ptr ptr long ptr)
|
@ stdcall NtQuerySystemEnvironmentValue(ptr ptr long ptr)
|
||||||
@ stdcall NtQuerySystemEnvironmentValueEx(ptr ptr ptr ptr ptr)
|
@ stdcall NtQuerySystemEnvironmentValueEx(ptr ptr ptr ptr ptr)
|
||||||
@ stdcall -syscall NtQuerySystemInformation(long ptr long ptr)
|
@ stdcall -syscall NtQuerySystemInformation(long ptr long ptr)
|
||||||
|
@ -1148,7 +1148,7 @@
|
||||||
@ stdcall -private ZwConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) NtConnectPort
|
@ stdcall -private ZwConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) NtConnectPort
|
||||||
@ stdcall -private -syscall ZwContinue(ptr long) NtContinue
|
@ stdcall -private -syscall ZwContinue(ptr long) NtContinue
|
||||||
# @ stub ZwCreateDebugObject
|
# @ stub ZwCreateDebugObject
|
||||||
@ stdcall -private ZwCreateDirectoryObject(ptr long ptr) NtCreateDirectoryObject
|
@ stdcall -private -syscall ZwCreateDirectoryObject(ptr long ptr) NtCreateDirectoryObject
|
||||||
@ stdcall -private -syscall ZwCreateEvent(ptr long ptr long long) NtCreateEvent
|
@ stdcall -private -syscall ZwCreateEvent(ptr long ptr long long) NtCreateEvent
|
||||||
@ stub ZwCreateEventPair
|
@ stub ZwCreateEventPair
|
||||||
@ stdcall -private -syscall ZwCreateFile(ptr long ptr ptr ptr long long long long ptr long) NtCreateFile
|
@ stdcall -private -syscall ZwCreateFile(ptr long ptr ptr ptr long long long long ptr long) NtCreateFile
|
||||||
|
@ -1169,7 +1169,7 @@
|
||||||
@ stub ZwCreateProfile
|
@ stub ZwCreateProfile
|
||||||
@ stdcall -private -syscall ZwCreateSection(ptr long ptr ptr long long long) NtCreateSection
|
@ stdcall -private -syscall ZwCreateSection(ptr long ptr ptr long long long) NtCreateSection
|
||||||
@ stdcall -private -syscall ZwCreateSemaphore(ptr long ptr long long) NtCreateSemaphore
|
@ stdcall -private -syscall ZwCreateSemaphore(ptr long ptr long long) NtCreateSemaphore
|
||||||
@ stdcall -private ZwCreateSymbolicLinkObject(ptr long ptr ptr) NtCreateSymbolicLinkObject
|
@ stdcall -private -syscall ZwCreateSymbolicLinkObject(ptr long ptr ptr) NtCreateSymbolicLinkObject
|
||||||
@ stub ZwCreateThread
|
@ stub ZwCreateThread
|
||||||
@ stdcall -private -syscall ZwCreateThreadEx(ptr long ptr long ptr ptr long long long long ptr) NtCreateThreadEx
|
@ stdcall -private -syscall ZwCreateThreadEx(ptr long ptr long ptr ptr long long long long ptr) NtCreateThreadEx
|
||||||
@ stdcall -private -syscall ZwCreateTimer(ptr long ptr long) NtCreateTimer
|
@ stdcall -private -syscall ZwCreateTimer(ptr long ptr long) NtCreateTimer
|
||||||
|
@ -1229,7 +1229,7 @@
|
||||||
# @ stub ZwLockRegistryKey
|
# @ stub ZwLockRegistryKey
|
||||||
@ stdcall -private -syscall ZwLockVirtualMemory(long ptr ptr long) NtLockVirtualMemory
|
@ stdcall -private -syscall ZwLockVirtualMemory(long ptr ptr long) NtLockVirtualMemory
|
||||||
# @ stub ZwMakePermanentObject
|
# @ stub ZwMakePermanentObject
|
||||||
@ stdcall -private ZwMakeTemporaryObject(long) NtMakeTemporaryObject
|
@ stdcall -private -syscall ZwMakeTemporaryObject(long) NtMakeTemporaryObject
|
||||||
# @ stub ZwMapUserPhysicalPages
|
# @ stub ZwMapUserPhysicalPages
|
||||||
# @ stub ZwMapUserPhysicalPagesScatter
|
# @ stub ZwMapUserPhysicalPagesScatter
|
||||||
@ stdcall -private -syscall ZwMapViewOfSection(long long ptr long long ptr ptr long long long) NtMapViewOfSection
|
@ stdcall -private -syscall ZwMapViewOfSection(long long ptr long long ptr ptr long long long) NtMapViewOfSection
|
||||||
|
@ -1237,7 +1237,7 @@
|
||||||
@ stdcall -private -syscall ZwNotifyChangeDirectoryFile(long long ptr ptr ptr ptr long long long) NtNotifyChangeDirectoryFile
|
@ stdcall -private -syscall ZwNotifyChangeDirectoryFile(long long ptr ptr ptr ptr long long long) NtNotifyChangeDirectoryFile
|
||||||
@ stdcall -private -syscall ZwNotifyChangeKey(long long ptr ptr ptr long long ptr long long) NtNotifyChangeKey
|
@ stdcall -private -syscall ZwNotifyChangeKey(long long ptr ptr ptr long long ptr long long) NtNotifyChangeKey
|
||||||
@ stdcall -private -syscall ZwNotifyChangeMultipleKeys(long long ptr long ptr ptr ptr long long ptr long long) NtNotifyChangeMultipleKeys
|
@ stdcall -private -syscall ZwNotifyChangeMultipleKeys(long long ptr long ptr ptr ptr long long ptr long long) NtNotifyChangeMultipleKeys
|
||||||
@ stdcall -private ZwOpenDirectoryObject(ptr long ptr) NtOpenDirectoryObject
|
@ stdcall -private -syscall ZwOpenDirectoryObject(ptr long ptr) NtOpenDirectoryObject
|
||||||
@ stdcall -private -syscall ZwOpenEvent(ptr long ptr) NtOpenEvent
|
@ stdcall -private -syscall ZwOpenEvent(ptr long ptr) NtOpenEvent
|
||||||
@ stub ZwOpenEventPair
|
@ stub ZwOpenEventPair
|
||||||
@ stdcall -private -syscall ZwOpenFile(ptr long ptr ptr long long) NtOpenFile
|
@ stdcall -private -syscall ZwOpenFile(ptr long ptr ptr long long) NtOpenFile
|
||||||
|
@ -1255,7 +1255,7 @@
|
||||||
@ stdcall -private ZwOpenProcessTokenEx(long long long ptr) NtOpenProcessTokenEx
|
@ stdcall -private ZwOpenProcessTokenEx(long long long ptr) NtOpenProcessTokenEx
|
||||||
@ stdcall -private -syscall ZwOpenSection(ptr long ptr) NtOpenSection
|
@ stdcall -private -syscall ZwOpenSection(ptr long ptr) NtOpenSection
|
||||||
@ stdcall -private -syscall ZwOpenSemaphore(ptr long ptr) NtOpenSemaphore
|
@ stdcall -private -syscall ZwOpenSemaphore(ptr long ptr) NtOpenSemaphore
|
||||||
@ stdcall -private ZwOpenSymbolicLinkObject (ptr long ptr) NtOpenSymbolicLinkObject
|
@ stdcall -private -syscall ZwOpenSymbolicLinkObject (ptr long ptr) NtOpenSymbolicLinkObject
|
||||||
@ stdcall -private -syscall ZwOpenThread(ptr long ptr ptr) NtOpenThread
|
@ stdcall -private -syscall ZwOpenThread(ptr long ptr ptr) NtOpenThread
|
||||||
@ stdcall -private ZwOpenThreadToken(long long long ptr) NtOpenThreadToken
|
@ stdcall -private ZwOpenThreadToken(long long long ptr) NtOpenThreadToken
|
||||||
@ stdcall -private ZwOpenThreadTokenEx(long long long long ptr) NtOpenThreadTokenEx
|
@ stdcall -private ZwOpenThreadTokenEx(long long long long ptr) NtOpenThreadTokenEx
|
||||||
|
@ -1274,7 +1274,7 @@
|
||||||
@ stdcall -private ZwQueryDefaultLocale(long ptr) NtQueryDefaultLocale
|
@ stdcall -private ZwQueryDefaultLocale(long ptr) NtQueryDefaultLocale
|
||||||
@ stdcall -private ZwQueryDefaultUILanguage(ptr) NtQueryDefaultUILanguage
|
@ stdcall -private ZwQueryDefaultUILanguage(ptr) NtQueryDefaultUILanguage
|
||||||
@ stdcall -private -syscall ZwQueryDirectoryFile(long long ptr ptr ptr ptr long long long ptr long) NtQueryDirectoryFile
|
@ stdcall -private -syscall ZwQueryDirectoryFile(long long ptr ptr ptr ptr long long long ptr long) NtQueryDirectoryFile
|
||||||
@ stdcall -private ZwQueryDirectoryObject(long ptr long long long ptr ptr) NtQueryDirectoryObject
|
@ stdcall -private -syscall ZwQueryDirectoryObject(long ptr long long long ptr ptr) NtQueryDirectoryObject
|
||||||
@ stdcall -private -syscall ZwQueryEaFile(long ptr ptr long long ptr long ptr long) NtQueryEaFile
|
@ stdcall -private -syscall ZwQueryEaFile(long ptr ptr long long ptr long ptr long) NtQueryEaFile
|
||||||
@ stdcall -private -syscall ZwQueryEvent(long long ptr long ptr) NtQueryEvent
|
@ stdcall -private -syscall ZwQueryEvent(long long ptr long ptr) NtQueryEvent
|
||||||
@ stdcall -private -syscall ZwQueryFullAttributesFile(ptr ptr) NtQueryFullAttributesFile
|
@ stdcall -private -syscall ZwQueryFullAttributesFile(ptr ptr) NtQueryFullAttributesFile
|
||||||
|
@ -1300,7 +1300,7 @@
|
||||||
@ stdcall -private -syscall ZwQuerySection(long long ptr long ptr) NtQuerySection
|
@ stdcall -private -syscall ZwQuerySection(long long ptr long ptr) NtQuerySection
|
||||||
@ stdcall -private ZwQuerySecurityObject(long long ptr long ptr) NtQuerySecurityObject
|
@ stdcall -private ZwQuerySecurityObject(long long ptr long ptr) NtQuerySecurityObject
|
||||||
@ stdcall -private -syscall ZwQuerySemaphore(long long ptr long ptr) NtQuerySemaphore
|
@ stdcall -private -syscall ZwQuerySemaphore(long long ptr long ptr) NtQuerySemaphore
|
||||||
@ stdcall -private ZwQuerySymbolicLinkObject(long ptr ptr) NtQuerySymbolicLinkObject
|
@ stdcall -private -syscall ZwQuerySymbolicLinkObject(long ptr ptr) NtQuerySymbolicLinkObject
|
||||||
@ stdcall -private ZwQuerySystemEnvironmentValue(ptr ptr long ptr) NtQuerySystemEnvironmentValue
|
@ stdcall -private ZwQuerySystemEnvironmentValue(ptr ptr long ptr) NtQuerySystemEnvironmentValue
|
||||||
@ stdcall -private ZwQuerySystemEnvironmentValueEx(ptr ptr ptr ptr ptr) NtQuerySystemEnvironmentValueEx
|
@ stdcall -private ZwQuerySystemEnvironmentValueEx(ptr ptr ptr ptr ptr) NtQuerySystemEnvironmentValueEx
|
||||||
@ stdcall -private -syscall ZwQuerySystemInformation(long ptr long ptr) NtQuerySystemInformation
|
@ stdcall -private -syscall ZwQuerySystemInformation(long ptr long ptr) NtQuerySystemInformation
|
||||||
|
|
|
@ -73,7 +73,6 @@ extern NTSTATUS restart_process( RTL_USER_PROCESS_PARAMETERS *params, NTSTATUS s
|
||||||
extern BOOL is_wow64 DECLSPEC_HIDDEN;
|
extern BOOL is_wow64 DECLSPEC_HIDDEN;
|
||||||
extern NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct object_attributes **ret,
|
extern NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct object_attributes **ret,
|
||||||
data_size_t *ret_len ) DECLSPEC_HIDDEN;
|
data_size_t *ret_len ) DECLSPEC_HIDDEN;
|
||||||
extern NTSTATUS validate_open_object_attributes( const OBJECT_ATTRIBUTES *attr ) DECLSPEC_HIDDEN;
|
|
||||||
|
|
||||||
/* module handling */
|
/* module handling */
|
||||||
extern LIST_ENTRY tls_links DECLSPEC_HIDDEN;
|
extern LIST_ENTRY tls_links DECLSPEC_HIDDEN;
|
||||||
|
|
304
dlls/ntdll/om.c
304
dlls/ntdll/om.c
|
@ -179,281 +179,6 @@ NTSTATUS WINAPI NtClose( HANDLE Handle )
|
||||||
return close_handle( Handle );
|
return close_handle( Handle );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Directory functions
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* NtOpenDirectoryObject [NTDLL.@]
|
|
||||||
* ZwOpenDirectoryObject [NTDLL.@]
|
|
||||||
*
|
|
||||||
* Open a namespace directory object.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* DirectoryHandle [O] Destination for the new directory handle
|
|
||||||
* DesiredAccess [I] Desired access to the directory
|
|
||||||
* ObjectAttributes [I] Structure describing the directory
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: ERROR_SUCCESS.
|
|
||||||
* Failure: An NTSTATUS error code.
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtOpenDirectoryObject( HANDLE *handle, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr)
|
|
||||||
{
|
|
||||||
NTSTATUS ret;
|
|
||||||
|
|
||||||
if (!handle) return STATUS_ACCESS_VIOLATION;
|
|
||||||
if ((ret = validate_open_object_attributes( attr ))) return ret;
|
|
||||||
|
|
||||||
TRACE("(%p,0x%08x,%s)\n", handle, access, debugstr_ObjectAttributes(attr));
|
|
||||||
|
|
||||||
SERVER_START_REQ(open_directory)
|
|
||||||
{
|
|
||||||
req->access = access;
|
|
||||||
req->attributes = attr->Attributes;
|
|
||||||
req->rootdir = wine_server_obj_handle( attr->RootDirectory );
|
|
||||||
if (attr->ObjectName)
|
|
||||||
wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length );
|
|
||||||
ret = wine_server_call( req );
|
|
||||||
*handle = wine_server_ptr_handle( reply->handle );
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* NtCreateDirectoryObject [NTDLL.@]
|
|
||||||
* ZwCreateDirectoryObject [NTDLL.@]
|
|
||||||
*
|
|
||||||
* Create a namespace directory object.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* DirectoryHandle [O] Destination for the new directory handle
|
|
||||||
* DesiredAccess [I] Desired access to the directory
|
|
||||||
* ObjectAttributes [I] Structure describing the directory
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: ERROR_SUCCESS.
|
|
||||||
* Failure: An NTSTATUS error code.
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtCreateDirectoryObject(PHANDLE DirectoryHandle, ACCESS_MASK DesiredAccess,
|
|
||||||
OBJECT_ATTRIBUTES *attr )
|
|
||||||
{
|
|
||||||
NTSTATUS ret;
|
|
||||||
data_size_t len;
|
|
||||||
struct object_attributes *objattr;
|
|
||||||
|
|
||||||
if (!DirectoryHandle) return STATUS_ACCESS_VIOLATION;
|
|
||||||
TRACE("(%p,0x%08x,%s)\n", DirectoryHandle, DesiredAccess, debugstr_ObjectAttributes(attr));
|
|
||||||
|
|
||||||
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
|
|
||||||
|
|
||||||
SERVER_START_REQ(create_directory)
|
|
||||||
{
|
|
||||||
req->access = DesiredAccess;
|
|
||||||
wine_server_add_data( req, objattr, len );
|
|
||||||
ret = wine_server_call( req );
|
|
||||||
*DirectoryHandle = wine_server_ptr_handle( reply->handle );
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
|
|
||||||
RtlFreeHeap( GetProcessHeap(), 0, objattr );
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* NtQueryDirectoryObject [NTDLL.@]
|
|
||||||
* ZwQueryDirectoryObject [NTDLL.@]
|
|
||||||
*
|
|
||||||
* Read information from a namespace directory.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* handle [I] Handle to a directory object
|
|
||||||
* buffer [O] Buffer to hold the read data
|
|
||||||
* size [I] Size of the buffer in bytes
|
|
||||||
* single_entry [I] If TRUE, return a single entry, if FALSE, return as many as fit in the buffer
|
|
||||||
* restart [I] If TRUE, start scanning from the start, if FALSE, scan from Context
|
|
||||||
* context [I/O] Indicates what point of the directory the scan is at
|
|
||||||
* ret_size [O] Caller supplied storage for the number of bytes written (or NULL)
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: ERROR_SUCCESS.
|
|
||||||
* Failure: An NTSTATUS error code.
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtQueryDirectoryObject(HANDLE handle, PDIRECTORY_BASIC_INFORMATION buffer,
|
|
||||||
ULONG size, BOOLEAN single_entry, BOOLEAN restart,
|
|
||||||
PULONG context, PULONG ret_size)
|
|
||||||
{
|
|
||||||
NTSTATUS ret;
|
|
||||||
|
|
||||||
if (restart) *context = 0;
|
|
||||||
|
|
||||||
if (single_entry)
|
|
||||||
{
|
|
||||||
if (size <= sizeof(*buffer) + 2*sizeof(WCHAR)) return STATUS_BUFFER_OVERFLOW;
|
|
||||||
|
|
||||||
SERVER_START_REQ( get_directory_entry )
|
|
||||||
{
|
|
||||||
req->handle = wine_server_obj_handle( handle );
|
|
||||||
req->index = *context;
|
|
||||||
wine_server_set_reply( req, buffer + 1, size - sizeof(*buffer) - 2*sizeof(WCHAR) );
|
|
||||||
if (!(ret = wine_server_call( req )))
|
|
||||||
{
|
|
||||||
buffer->ObjectName.Buffer = (WCHAR *)(buffer + 1);
|
|
||||||
buffer->ObjectName.Length = reply->name_len;
|
|
||||||
buffer->ObjectName.MaximumLength = reply->name_len + sizeof(WCHAR);
|
|
||||||
buffer->ObjectTypeName.Buffer = (WCHAR *)(buffer + 1) + reply->name_len/sizeof(WCHAR) + 1;
|
|
||||||
buffer->ObjectTypeName.Length = wine_server_reply_size( reply ) - reply->name_len;
|
|
||||||
buffer->ObjectTypeName.MaximumLength = buffer->ObjectTypeName.Length + sizeof(WCHAR);
|
|
||||||
/* make room for the terminating null */
|
|
||||||
memmove( buffer->ObjectTypeName.Buffer, buffer->ObjectTypeName.Buffer - 1,
|
|
||||||
buffer->ObjectTypeName.Length );
|
|
||||||
buffer->ObjectName.Buffer[buffer->ObjectName.Length/sizeof(WCHAR)] = 0;
|
|
||||||
buffer->ObjectTypeName.Buffer[buffer->ObjectTypeName.Length/sizeof(WCHAR)] = 0;
|
|
||||||
(*context)++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
if (ret_size)
|
|
||||||
*ret_size = buffer->ObjectName.MaximumLength + buffer->ObjectTypeName.MaximumLength + sizeof(*buffer);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FIXME("multiple entries not implemented\n");
|
|
||||||
ret = STATUS_NOT_IMPLEMENTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Link objects
|
|
||||||
*/
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* NtOpenSymbolicLinkObject [NTDLL.@]
|
|
||||||
* ZwOpenSymbolicLinkObject [NTDLL.@]
|
|
||||||
*
|
|
||||||
* Open a namespace symbolic link object.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* LinkHandle [O] Destination for the new symbolic link handle
|
|
||||||
* DesiredAccess [I] Desired access to the symbolic link
|
|
||||||
* ObjectAttributes [I] Structure describing the symbolic link
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: ERROR_SUCCESS.
|
|
||||||
* Failure: An NTSTATUS error code.
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtOpenSymbolicLinkObject( HANDLE *handle, ACCESS_MASK access,
|
|
||||||
const OBJECT_ATTRIBUTES *attr)
|
|
||||||
{
|
|
||||||
NTSTATUS ret;
|
|
||||||
|
|
||||||
TRACE("(%p,0x%08x,%s)\n", handle, access, debugstr_ObjectAttributes(attr));
|
|
||||||
|
|
||||||
if (!handle) return STATUS_ACCESS_VIOLATION;
|
|
||||||
if ((ret = validate_open_object_attributes( attr ))) return ret;
|
|
||||||
|
|
||||||
SERVER_START_REQ(open_symlink)
|
|
||||||
{
|
|
||||||
req->access = access;
|
|
||||||
req->attributes = attr->Attributes;
|
|
||||||
req->rootdir = wine_server_obj_handle( attr->RootDirectory );
|
|
||||||
if (attr->ObjectName)
|
|
||||||
wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length );
|
|
||||||
ret = wine_server_call( req );
|
|
||||||
*handle = wine_server_ptr_handle( reply->handle );
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* NtCreateSymbolicLinkObject [NTDLL.@]
|
|
||||||
* ZwCreateSymbolicLinkObject [NTDLL.@]
|
|
||||||
*
|
|
||||||
* Open a namespace symbolic link object.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* SymbolicLinkHandle [O] Destination for the new symbolic link handle
|
|
||||||
* DesiredAccess [I] Desired access to the symbolic link
|
|
||||||
* ObjectAttributes [I] Structure describing the symbolic link
|
|
||||||
* TargetName [I] Name of the target symbolic link points to
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: ERROR_SUCCESS.
|
|
||||||
* Failure: An NTSTATUS error code.
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtCreateSymbolicLinkObject(OUT PHANDLE SymbolicLinkHandle,IN ACCESS_MASK DesiredAccess,
|
|
||||||
POBJECT_ATTRIBUTES attr, PUNICODE_STRING TargetName)
|
|
||||||
{
|
|
||||||
NTSTATUS ret;
|
|
||||||
data_size_t len;
|
|
||||||
struct object_attributes *objattr;
|
|
||||||
|
|
||||||
if (!SymbolicLinkHandle || !attr || !TargetName) return STATUS_ACCESS_VIOLATION;
|
|
||||||
if (!TargetName->Buffer) return STATUS_INVALID_PARAMETER;
|
|
||||||
|
|
||||||
TRACE("(%p,0x%08x,%s -> %s)\n", SymbolicLinkHandle, DesiredAccess,
|
|
||||||
debugstr_ObjectAttributes(attr), debugstr_us(TargetName));
|
|
||||||
|
|
||||||
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
|
|
||||||
|
|
||||||
SERVER_START_REQ(create_symlink)
|
|
||||||
{
|
|
||||||
req->access = DesiredAccess;
|
|
||||||
wine_server_add_data( req, objattr, len );
|
|
||||||
wine_server_add_data(req, TargetName->Buffer, TargetName->Length);
|
|
||||||
ret = wine_server_call( req );
|
|
||||||
*SymbolicLinkHandle = wine_server_ptr_handle( reply->handle );
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
|
|
||||||
RtlFreeHeap( GetProcessHeap(), 0, objattr );
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* NtQuerySymbolicLinkObject [NTDLL.@]
|
|
||||||
* ZwQuerySymbolicLinkObject [NTDLL.@]
|
|
||||||
*
|
|
||||||
* Query a namespace symbolic link object target name.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* handle [I] Handle to a symbolic link object
|
|
||||||
* target [O] Destination for the symbolic link target
|
|
||||||
* length [O] Size of returned data
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: ERROR_SUCCESS.
|
|
||||||
* Failure: An NTSTATUS error code.
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtQuerySymbolicLinkObject( HANDLE handle, PUNICODE_STRING target, PULONG length )
|
|
||||||
{
|
|
||||||
NTSTATUS ret;
|
|
||||||
|
|
||||||
TRACE("(%p,%p,%p)\n", handle, target, length );
|
|
||||||
|
|
||||||
if (!target) return STATUS_ACCESS_VIOLATION;
|
|
||||||
|
|
||||||
SERVER_START_REQ(query_symlink)
|
|
||||||
{
|
|
||||||
req->handle = wine_server_obj_handle( handle );
|
|
||||||
if (target->MaximumLength >= sizeof(WCHAR))
|
|
||||||
wine_server_set_reply( req, target->Buffer, target->MaximumLength - sizeof(WCHAR) );
|
|
||||||
if (!(ret = wine_server_call( req )))
|
|
||||||
{
|
|
||||||
target->Length = wine_server_reply_size(reply);
|
|
||||||
target->Buffer[target->Length / sizeof(WCHAR)] = 0;
|
|
||||||
if (length) *length = reply->total + sizeof(WCHAR);
|
|
||||||
}
|
|
||||||
else if (length && ret == STATUS_BUFFER_TOO_SMALL) *length = reply->total + sizeof(WCHAR);
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* NtAllocateUuids [NTDLL.@]
|
* NtAllocateUuids [NTDLL.@]
|
||||||
*/
|
*/
|
||||||
|
@ -462,32 +187,3 @@ NTSTATUS WINAPI NtAllocateUuids( ULARGE_INTEGER *time, ULONG *delta, ULONG *sequ
|
||||||
FIXME("(%p,%p,%p,%p), stub.\n", time, delta, sequence, seed);
|
FIXME("(%p,%p,%p,%p), stub.\n", time, delta, sequence, seed);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* NtMakeTemporaryObject [NTDLL.@]
|
|
||||||
* ZwMakeTemporaryObject [NTDLL.@]
|
|
||||||
*
|
|
||||||
* Make a permanent object temporary.
|
|
||||||
*
|
|
||||||
* PARAMS
|
|
||||||
* Handle [I] handle to permanent object
|
|
||||||
*
|
|
||||||
* RETURNS
|
|
||||||
* Success: STATUS_SUCCESS.
|
|
||||||
* Failure: An NTSTATUS error code.
|
|
||||||
*/
|
|
||||||
NTSTATUS WINAPI NtMakeTemporaryObject( HANDLE handle )
|
|
||||||
{
|
|
||||||
NTSTATUS ret;
|
|
||||||
|
|
||||||
TRACE("%p\n", handle);
|
|
||||||
|
|
||||||
SERVER_START_REQ( make_temporary )
|
|
||||||
{
|
|
||||||
req->handle = wine_server_obj_handle( handle );
|
|
||||||
ret = wine_server_call( req );
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
|
@ -122,19 +122,6 @@ NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct object_a
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS validate_open_object_attributes( const OBJECT_ATTRIBUTES *attr )
|
|
||||||
{
|
|
||||||
if (!attr || attr->Length != sizeof(*attr)) return STATUS_INVALID_PARAMETER;
|
|
||||||
|
|
||||||
if (attr->ObjectName)
|
|
||||||
{
|
|
||||||
if (attr->ObjectName->Length & (sizeof(WCHAR) - 1)) return STATUS_OBJECT_NAME_INVALID;
|
|
||||||
}
|
|
||||||
else if (attr->RootDirectory) return STATUS_OBJECT_NAME_INVALID;
|
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Timers
|
* Timers
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -904,6 +904,207 @@ NTSTATUS WINAPI NtAssignProcessToJobObject( HANDLE job, HANDLE process )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* NtCreateDirectoryObject (NTDLL.@)
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI NtCreateDirectoryObject( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBUTES *attr )
|
||||||
|
{
|
||||||
|
NTSTATUS ret;
|
||||||
|
data_size_t len;
|
||||||
|
struct object_attributes *objattr;
|
||||||
|
|
||||||
|
if (!handle) return STATUS_ACCESS_VIOLATION;
|
||||||
|
|
||||||
|
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
|
||||||
|
|
||||||
|
SERVER_START_REQ( create_directory )
|
||||||
|
{
|
||||||
|
req->access = access;
|
||||||
|
wine_server_add_data( req, objattr, len );
|
||||||
|
ret = wine_server_call( req );
|
||||||
|
*handle = wine_server_ptr_handle( reply->handle );
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
free( objattr );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* NtOpenDirectoryObject (NTDLL.@)
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI NtOpenDirectoryObject( HANDLE *handle, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr )
|
||||||
|
{
|
||||||
|
NTSTATUS ret;
|
||||||
|
|
||||||
|
if (!handle) return STATUS_ACCESS_VIOLATION;
|
||||||
|
if ((ret = validate_open_object_attributes( attr ))) return ret;
|
||||||
|
|
||||||
|
SERVER_START_REQ( open_directory )
|
||||||
|
{
|
||||||
|
req->access = access;
|
||||||
|
req->attributes = attr->Attributes;
|
||||||
|
req->rootdir = wine_server_obj_handle( attr->RootDirectory );
|
||||||
|
if (attr->ObjectName)
|
||||||
|
wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length );
|
||||||
|
ret = wine_server_call( req );
|
||||||
|
*handle = wine_server_ptr_handle( reply->handle );
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* NtQueryDirectoryObject (NTDLL.@)
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI NtQueryDirectoryObject( HANDLE handle, DIRECTORY_BASIC_INFORMATION *buffer,
|
||||||
|
ULONG size, BOOLEAN single_entry, BOOLEAN restart,
|
||||||
|
ULONG *context, ULONG *ret_size )
|
||||||
|
{
|
||||||
|
NTSTATUS ret;
|
||||||
|
|
||||||
|
if (restart) *context = 0;
|
||||||
|
|
||||||
|
if (single_entry)
|
||||||
|
{
|
||||||
|
if (size <= sizeof(*buffer) + 2 * sizeof(WCHAR)) return STATUS_BUFFER_OVERFLOW;
|
||||||
|
|
||||||
|
SERVER_START_REQ( get_directory_entry )
|
||||||
|
{
|
||||||
|
req->handle = wine_server_obj_handle( handle );
|
||||||
|
req->index = *context;
|
||||||
|
wine_server_set_reply( req, buffer + 1, size - sizeof(*buffer) - 2*sizeof(WCHAR) );
|
||||||
|
if (!(ret = wine_server_call( req )))
|
||||||
|
{
|
||||||
|
buffer->ObjectName.Buffer = (WCHAR *)(buffer + 1);
|
||||||
|
buffer->ObjectName.Length = reply->name_len;
|
||||||
|
buffer->ObjectName.MaximumLength = reply->name_len + sizeof(WCHAR);
|
||||||
|
buffer->ObjectTypeName.Buffer = (WCHAR *)(buffer + 1) + reply->name_len/sizeof(WCHAR) + 1;
|
||||||
|
buffer->ObjectTypeName.Length = wine_server_reply_size( reply ) - reply->name_len;
|
||||||
|
buffer->ObjectTypeName.MaximumLength = buffer->ObjectTypeName.Length + sizeof(WCHAR);
|
||||||
|
/* make room for the terminating null */
|
||||||
|
memmove( buffer->ObjectTypeName.Buffer, buffer->ObjectTypeName.Buffer - 1,
|
||||||
|
buffer->ObjectTypeName.Length );
|
||||||
|
buffer->ObjectName.Buffer[buffer->ObjectName.Length/sizeof(WCHAR)] = 0;
|
||||||
|
buffer->ObjectTypeName.Buffer[buffer->ObjectTypeName.Length/sizeof(WCHAR)] = 0;
|
||||||
|
(*context)++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
if (ret_size)
|
||||||
|
*ret_size = buffer->ObjectName.MaximumLength + buffer->ObjectTypeName.MaximumLength + sizeof(*buffer);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FIXME("multiple entries not implemented\n");
|
||||||
|
ret = STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* NtCreateSymbolicLinkObject (NTDLL.@)
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI NtCreateSymbolicLinkObject( HANDLE *handle, ACCESS_MASK access,
|
||||||
|
OBJECT_ATTRIBUTES *attr, UNICODE_STRING *target )
|
||||||
|
{
|
||||||
|
NTSTATUS ret;
|
||||||
|
data_size_t len;
|
||||||
|
struct object_attributes *objattr;
|
||||||
|
|
||||||
|
if (!handle || !attr || !target) return STATUS_ACCESS_VIOLATION;
|
||||||
|
if (!target->Buffer) return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
|
||||||
|
|
||||||
|
SERVER_START_REQ( create_symlink )
|
||||||
|
{
|
||||||
|
req->access = access;
|
||||||
|
wine_server_add_data( req, objattr, len );
|
||||||
|
wine_server_add_data( req, target->Buffer, target->Length );
|
||||||
|
ret = wine_server_call( req );
|
||||||
|
*handle = wine_server_ptr_handle( reply->handle );
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
free( objattr );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* NtOpenSymbolicLinkObject (NTDLL.@)
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI NtOpenSymbolicLinkObject( HANDLE *handle, ACCESS_MASK access,
|
||||||
|
const OBJECT_ATTRIBUTES *attr )
|
||||||
|
{
|
||||||
|
NTSTATUS ret;
|
||||||
|
|
||||||
|
if (!handle) return STATUS_ACCESS_VIOLATION;
|
||||||
|
if ((ret = validate_open_object_attributes( attr ))) return ret;
|
||||||
|
|
||||||
|
SERVER_START_REQ( open_symlink )
|
||||||
|
{
|
||||||
|
req->access = access;
|
||||||
|
req->attributes = attr->Attributes;
|
||||||
|
req->rootdir = wine_server_obj_handle( attr->RootDirectory );
|
||||||
|
if (attr->ObjectName)
|
||||||
|
wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length );
|
||||||
|
ret = wine_server_call( req );
|
||||||
|
*handle = wine_server_ptr_handle( reply->handle );
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* NtQuerySymbolicLinkObject (NTDLL.@)
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI NtQuerySymbolicLinkObject( HANDLE handle, UNICODE_STRING *target, ULONG *length )
|
||||||
|
{
|
||||||
|
NTSTATUS ret;
|
||||||
|
|
||||||
|
if (!target) return STATUS_ACCESS_VIOLATION;
|
||||||
|
|
||||||
|
SERVER_START_REQ( query_symlink )
|
||||||
|
{
|
||||||
|
req->handle = wine_server_obj_handle( handle );
|
||||||
|
if (target->MaximumLength >= sizeof(WCHAR))
|
||||||
|
wine_server_set_reply( req, target->Buffer, target->MaximumLength - sizeof(WCHAR) );
|
||||||
|
if (!(ret = wine_server_call( req )))
|
||||||
|
{
|
||||||
|
target->Length = wine_server_reply_size(reply);
|
||||||
|
target->Buffer[target->Length / sizeof(WCHAR)] = 0;
|
||||||
|
if (length) *length = reply->total + sizeof(WCHAR);
|
||||||
|
}
|
||||||
|
else if (length && ret == STATUS_BUFFER_TOO_SMALL) *length = reply->total + sizeof(WCHAR);
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* NtMakeTemporaryObject (NTDLL.@)
|
||||||
|
*/
|
||||||
|
NTSTATUS WINAPI NtMakeTemporaryObject( HANDLE handle )
|
||||||
|
{
|
||||||
|
NTSTATUS ret;
|
||||||
|
|
||||||
|
TRACE("%p\n", handle);
|
||||||
|
|
||||||
|
SERVER_START_REQ( make_temporary )
|
||||||
|
{
|
||||||
|
req->handle = wine_server_obj_handle( handle );
|
||||||
|
ret = wine_server_call( req );
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* NtCreateTimer (NTDLL.@)
|
* NtCreateTimer (NTDLL.@)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue