summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/pemagine/pemagine.h4
-rw-r--r--src/ldso/pe_open_image_from_addr.c9
-rw-r--r--src/ldso/pe_open_physical_parent_directory.c9
3 files changed, 14 insertions, 8 deletions
diff --git a/include/pemagine/pemagine.h b/include/pemagine/pemagine.h
index d5d0e66..d8d3159 100644
--- a/include/pemagine/pemagine.h
+++ b/include/pemagine/pemagine.h
@@ -202,7 +202,9 @@ pe_api int32_t pe_open_image_from_addr(
void * addr,
uintptr_t * buffer,
uint32_t buffer_size,
+ uint32_t oattr,
uint32_t desired_access,
+ uint32_t share_access,
uint32_t open_options);
@@ -211,7 +213,9 @@ pe_api int32_t pe_open_physical_parent_directory(
void * href,
uintptr_t * buffer,
uint32_t buffer_size,
+ uint32_t oattr,
uint32_t desired_access,
+ uint32_t share_access,
uint32_t open_options);
diff --git a/src/ldso/pe_open_image_from_addr.c b/src/ldso/pe_open_image_from_addr.c
index 2729a18..810503c 100644
--- a/src/ldso/pe_open_image_from_addr.c
+++ b/src/ldso/pe_open_image_from_addr.c
@@ -19,7 +19,9 @@ pe_api int32_t pe_open_image_from_addr(
__in void * addr,
__out uintptr_t * buffer,
__in uint32_t buffer_size,
+ __in uint32_t oattr,
__in uint32_t desired_access,
+ __in uint32_t share_access,
__in uint32_t open_options)
{
int32_t status;
@@ -63,7 +65,7 @@ pe_api int32_t pe_open_image_from_addr(
oa.len = sizeof(struct os_oa);
oa.root_dir = 0;
oa.obj_name = &path->section_name;
- oa.obj_attr = 0;
+ oa.obj_attr = oattr;
oa.sec_desc = 0;
oa.sec_qos = 0;
@@ -76,8 +78,7 @@ pe_api int32_t pe_open_image_from_addr(
return zw_open_file(
himage,
desired_access,
- &oa,
- &iosb,
- OS_FILE_SHARE_READ | OS_FILE_SHARE_WRITE,
+ &oa,&iosb,
+ share_access,
open_options | OS_FILE_NON_DIRECTORY_FILE);
}
diff --git a/src/ldso/pe_open_physical_parent_directory.c b/src/ldso/pe_open_physical_parent_directory.c
index 7166df5..5f535a3 100644
--- a/src/ldso/pe_open_physical_parent_directory.c
+++ b/src/ldso/pe_open_physical_parent_directory.c
@@ -14,7 +14,9 @@ int32_t pe_open_physical_parent_directory(
__in void * href,
__out uintptr_t * buffer,
__in uint32_t buffer_size,
+ __in uint32_t oattr,
__in uint32_t desired_access,
+ __in uint32_t share_access,
__in uint32_t open_options)
{
int32_t status;
@@ -85,7 +87,7 @@ int32_t pe_open_physical_parent_directory(
oa.len = sizeof(struct os_oa);
oa.root_dir = 0;
oa.obj_name = path;
- oa.obj_attr = 0;
+ oa.obj_attr = oattr;
oa.sec_desc = 0;
oa.sec_qos = 0;
@@ -98,8 +100,7 @@ int32_t pe_open_physical_parent_directory(
return zw_open_file(
hparent,
desired_access,
- &oa,
- &iosb,
- OS_FILE_SHARE_READ | OS_FILE_SHARE_WRITE,
+ &oa,&iosb,
+ share_access,
open_options | OS_FILE_DIRECTORY_FILE);
}