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
3198fb0c
Commit
3198fb0c
authored
Jan 15, 2016
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Add a helper function to allocate the full object_attributes structure.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
8d0d1e56
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
19 additions
and
45 deletions
+19
-45
file.c
dlls/ntdll/file.c
+12
-21
ntdll_misc.h
dlls/ntdll/ntdll_misc.h
+2
-5
sync.c
dlls/ntdll/sync.c
+0
-0
virtual.c
dlls/ntdll/virtual.c
+5
-19
No files found.
dlls/ntdll/file.c
View file @
3198fb0c
...
...
@@ -218,13 +218,12 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
if
(
io
->
u
.
Status
==
STATUS_SUCCESS
)
{
struct
security_descriptor
*
sd
;
struct
object_attributes
objattr
;
OBJECT_ATTRIBUTES
unix_attr
=
*
attr
;
data_size_t
len
;
struct
object_attributes
*
objattr
;
objattr
.
rootdir
=
wine_server_obj_handle
(
attr
->
RootDirectory
);
objattr
.
name_len
=
0
;
io
->
u
.
Status
=
NTDLL_create_struct_sd
(
attr
->
SecurityDescriptor
,
&
sd
,
&
objattr
.
sd_len
);
if
(
io
->
u
.
Status
!=
STATUS_SUCCESS
)
unix_attr
.
ObjectName
=
NULL
;
/* we send the unix name instead */
if
((
io
->
u
.
Status
=
alloc_object_attributes
(
&
unix_attr
,
&
objattr
,
&
len
)))
{
RtlFreeAnsiString
(
&
unix_name
);
return
io
->
u
.
Status
;
...
...
@@ -238,14 +237,13 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
req
->
create
=
disposition
;
req
->
options
=
options
;
req
->
attrs
=
attributes
;
wine_server_add_data
(
req
,
&
objattr
,
sizeof
(
objattr
)
);
if
(
objattr
.
sd_len
)
wine_server_add_data
(
req
,
sd
,
objattr
.
sd_len
);
wine_server_add_data
(
req
,
objattr
,
len
);
wine_server_add_data
(
req
,
unix_name
.
Buffer
,
unix_name
.
Length
);
io
->
u
.
Status
=
wine_server_call
(
req
);
*
handle
=
wine_server_ptr_handle
(
reply
->
handle
);
}
SERVER_END_REQ
;
NTDLL_free_struct_sd
(
sd
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
objattr
);
RtlFreeAnsiString
(
&
unix_name
);
}
else
WARN
(
"%s not found (%x)
\n
"
,
debugstr_us
(
attr
->
ObjectName
),
io
->
u
.
Status
);
...
...
@@ -3506,9 +3504,9 @@ NTSTATUS WINAPI NtCreateNamedPipeFile( PHANDLE handle, ULONG access,
ULONG
inbound_quota
,
ULONG
outbound_quota
,
PLARGE_INTEGER
timeout
)
{
struct
security_descriptor
*
sd
=
NULL
;
struct
object_attributes
objattr
;
NTSTATUS
status
;
data_size_t
len
;
struct
object_attributes
*
objattr
;
TRACE
(
"(%p %x %s %p %x %d %x %d %d %d %d %d %d %p)
\n
"
,
handle
,
access
,
debugstr_w
(
attr
->
ObjectName
->
Buffer
),
iosb
,
sharing
,
dispo
,
...
...
@@ -3519,12 +3517,7 @@ NTSTATUS WINAPI NtCreateNamedPipeFile( PHANDLE handle, ULONG access,
if
(
timeout
->
QuadPart
>
0
)
FIXME
(
"Wrong time %s
\n
"
,
wine_dbgstr_longlong
(
timeout
->
QuadPart
));
objattr
.
rootdir
=
wine_server_obj_handle
(
attr
->
RootDirectory
);
objattr
.
sd_len
=
0
;
objattr
.
name_len
=
attr
->
ObjectName
->
Length
;
status
=
NTDLL_create_struct_sd
(
attr
->
SecurityDescriptor
,
&
sd
,
&
objattr
.
sd_len
);
if
(
status
!=
STATUS_SUCCESS
)
return
status
;
if
((
status
=
alloc_object_attributes
(
attr
,
&
objattr
,
&
len
)))
return
status
;
SERVER_START_REQ
(
create_named_pipe
)
{
...
...
@@ -3540,15 +3533,13 @@ NTSTATUS WINAPI NtCreateNamedPipeFile( PHANDLE handle, ULONG access,
req
->
outsize
=
outbound_quota
;
req
->
insize
=
inbound_quota
;
req
->
timeout
=
timeout
->
QuadPart
;
wine_server_add_data
(
req
,
&
objattr
,
sizeof
(
objattr
)
);
if
(
objattr
.
sd_len
)
wine_server_add_data
(
req
,
sd
,
objattr
.
sd_len
);
wine_server_add_data
(
req
,
attr
->
ObjectName
->
Buffer
,
attr
->
ObjectName
->
Length
);
wine_server_add_data
(
req
,
objattr
,
len
);
status
=
wine_server_call
(
req
);
if
(
!
status
)
*
handle
=
wine_server_ptr_handle
(
reply
->
handle
);
}
SERVER_END_REQ
;
NTDLL_free_struct_sd
(
sd
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
objattr
);
return
status
;
}
...
...
dlls/ntdll/ntdll_misc.h
View file @
3198fb0c
...
...
@@ -97,11 +97,8 @@ extern int server_remove_fd_from_cache( HANDLE handle ) DECLSPEC_HIDDEN;
extern
int
server_get_unix_fd
(
HANDLE
handle
,
unsigned
int
access
,
int
*
unix_fd
,
int
*
needs_close
,
enum
server_fd_type
*
type
,
unsigned
int
*
options
)
DECLSPEC_HIDDEN
;
extern
int
server_pipe
(
int
fd
[
2
]
)
DECLSPEC_HIDDEN
;
/* security descriptors */
NTSTATUS
NTDLL_create_struct_sd
(
PSECURITY_DESCRIPTOR
nt_sd
,
struct
security_descriptor
**
server_sd
,
data_size_t
*
server_sd_len
)
DECLSPEC_HIDDEN
;
void
NTDLL_free_struct_sd
(
struct
security_descriptor
*
server_sd
)
DECLSPEC_HIDDEN
;
extern
NTSTATUS
alloc_object_attributes
(
const
OBJECT_ATTRIBUTES
*
attr
,
struct
object_attributes
**
ret
,
data_size_t
*
ret_len
)
DECLSPEC_HIDDEN
;
/* module handling */
extern
LIST_ENTRY
tls_links
DECLSPEC_HIDDEN
;
...
...
dlls/ntdll/sync.c
View file @
3198fb0c
This diff is collapsed.
Click to expand it.
dlls/ntdll/virtual.c
View file @
3198fb0c
...
...
@@ -2460,24 +2460,13 @@ NTSTATUS WINAPI NtCreateSection( HANDLE *handle, ACCESS_MASK access, const OBJEC
{
NTSTATUS
ret
;
unsigned
int
vprot
;
DWORD
len
=
(
attr
&&
attr
->
ObjectName
)
?
attr
->
ObjectName
->
Length
:
0
;
struct
security_descriptor
*
sd
=
NULL
;
struct
object_attributes
objattr
;
data_size_t
len
;
struct
object_attributes
*
objattr
;
/* Check parameters */
if
(
len
>
MAX_PATH
*
sizeof
(
WCHAR
))
return
STATUS_NAME_TOO_LONG
;
if
((
ret
=
get_vprot_flags
(
protect
,
&
vprot
,
sec_flags
&
SEC_IMAGE
)))
return
ret
;
objattr
.
rootdir
=
wine_server_obj_handle
(
attr
?
attr
->
RootDirectory
:
0
);
objattr
.
sd_len
=
0
;
objattr
.
name_len
=
len
;
if
(
attr
)
{
ret
=
NTDLL_create_struct_sd
(
attr
->
SecurityDescriptor
,
&
sd
,
&
objattr
.
sd_len
);
if
(
ret
!=
STATUS_SUCCESS
)
return
ret
;
}
if
((
ret
=
alloc_object_attributes
(
attr
,
&
objattr
,
&
len
)))
return
ret
;
if
(
!
(
sec_flags
&
SEC_RESERVE
))
vprot
|=
VPROT_COMMITTED
;
if
(
sec_flags
&
SEC_NOCACHE
)
vprot
|=
VPROT_NOCACHE
;
...
...
@@ -2492,16 +2481,13 @@ NTSTATUS WINAPI NtCreateSection( HANDLE *handle, ACCESS_MASK access, const OBJEC
req
->
file_handle
=
wine_server_obj_handle
(
file
);
req
->
size
=
size
?
size
->
QuadPart
:
0
;
req
->
protect
=
vprot
;
wine_server_add_data
(
req
,
&
objattr
,
sizeof
(
objattr
)
);
if
(
objattr
.
sd_len
)
wine_server_add_data
(
req
,
sd
,
objattr
.
sd_len
);
if
(
len
)
wine_server_add_data
(
req
,
attr
->
ObjectName
->
Buffer
,
len
);
wine_server_add_data
(
req
,
objattr
,
len
);
ret
=
wine_server_call
(
req
);
*
handle
=
wine_server_ptr_handle
(
reply
->
handle
);
}
SERVER_END_REQ
;
NTDLL_free_struct_sd
(
sd
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
objattr
);
return
ret
;
}
...
...
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