diff options
Diffstat (limited to 'src/ldr')
-rw-r--r-- | src/ldr/ntapi_ldr_load_system_dll.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/ldr/ntapi_ldr_load_system_dll.c b/src/ldr/ntapi_ldr_load_system_dll.c index a5c56f6..306d8e9 100644 --- a/src/ldr/ntapi_ldr_load_system_dll.c +++ b/src/ldr/ntapi_ldr_load_system_dll.c @@ -17,30 +17,31 @@ int32_t __stdcall __ntapi_ldr_load_system_dll( __out void ** image_base) { int32_t status; + wchar16_t * sysdir; + nt_unicode_string nt_sysdir; nt_unicode_string nt_image_name; uintptr_t buffer[0x80]; (void)image_flags; /* stack buffer */ - __ntapi->tt_aligned_block_memset(buffer,0,sizeof(buffer)); + __ntapi->tt_aligned_block_memset( + buffer,0,sizeof(buffer)); - status = __ntapi->tt_get_system_directory_dos_path( - hsysdir, - (wchar16_t *)buffer, - sizeof(buffer), - base_name, - base_name_size, - &nt_image_name); + sysdir = (wchar16_t *)buffer; - if (status != NT_STATUS_SUCCESS) + if ((status = __ntapi->tt_get_system_directory_dos_path( + hsysdir, + sysdir,sizeof(buffer), + 0,0,&nt_sysdir))) return status; - status = __ntapi->ldr_load_dll( - 0, - 0, + nt_image_name.strlen = base_name_size; + nt_image_name.maxlen = base_name_size; + nt_image_name.buffer = base_name; + + return __ntapi->ldr_load_dll( + sysdir,0, &nt_image_name, image_base); - - return status; } |