ntdll: Avoid calling NtCreateFile() from the Unix side.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
76f949577a
commit
07f8b0c84a
|
@ -3919,12 +3919,20 @@ NTSTATUS WINAPI NtDeleteFile( OBJECT_ATTRIBUTES *attr )
|
||||||
{
|
{
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
NTSTATUS status;
|
NTSTATUS status;
|
||||||
IO_STATUS_BLOCK io;
|
char *unix_name;
|
||||||
|
UNICODE_STRING nt_name;
|
||||||
|
OBJECT_ATTRIBUTES new_attr = *attr;
|
||||||
|
|
||||||
status = NtCreateFile( &handle, GENERIC_READ | GENERIC_WRITE | DELETE, attr, &io, NULL, 0,
|
get_redirect( &new_attr, &nt_name );
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_OPEN,
|
if (!(status = nt_to_unix_file_name( &new_attr, &unix_name, FILE_OPEN )))
|
||||||
FILE_DELETE_ON_CLOSE, NULL, 0 );
|
{
|
||||||
if (status == STATUS_SUCCESS) NtClose( handle );
|
if (!(status = open_unix_file( &handle, unix_name, GENERIC_READ | GENERIC_WRITE | DELETE, &new_attr,
|
||||||
|
0, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_OPEN,
|
||||||
|
FILE_DELETE_ON_CLOSE, NULL, 0 )))
|
||||||
|
NtClose( handle );
|
||||||
|
free( unix_name );
|
||||||
|
}
|
||||||
|
free( nt_name.Buffer );
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -661,14 +661,23 @@ NTSTATUS WINAPI NtLoadKey( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *fil
|
||||||
{
|
{
|
||||||
NTSTATUS ret;
|
NTSTATUS ret;
|
||||||
HANDLE key;
|
HANDLE key;
|
||||||
IO_STATUS_BLOCK io;
|
|
||||||
data_size_t len;
|
data_size_t len;
|
||||||
struct object_attributes *objattr;
|
struct object_attributes *objattr;
|
||||||
|
char *unix_name;
|
||||||
|
UNICODE_STRING nt_name;
|
||||||
|
OBJECT_ATTRIBUTES new_attr = *file;
|
||||||
|
|
||||||
TRACE("(%p,%p)\n", attr, file);
|
TRACE("(%p,%p)\n", attr, file);
|
||||||
|
|
||||||
ret = NtCreateFile( &key, GENERIC_READ | SYNCHRONIZE, file, &io, NULL, FILE_ATTRIBUTE_NORMAL, 0,
|
get_redirect( &new_attr, &nt_name );
|
||||||
FILE_OPEN, 0, NULL, 0);
|
if (!(ret = nt_to_unix_file_name( &new_attr, &unix_name, FILE_OPEN )))
|
||||||
|
{
|
||||||
|
ret = open_unix_file( &key, unix_name, GENERIC_READ | SYNCHRONIZE,
|
||||||
|
&new_attr, 0, 0, FILE_OPEN, 0, NULL, 0 );
|
||||||
|
free( unix_name );
|
||||||
|
}
|
||||||
|
free( nt_name.Buffer );
|
||||||
|
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
|
|
||||||
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
|
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
|
||||||
|
|
Loading…
Reference in New Issue