[Memory] TranslateVirtual in shim and strings
This commit is contained in:
@@ -91,7 +91,7 @@ dword_result_t NtCreateFile(lpdword_t handle_out, dword_t desired_access,
|
||||
|
||||
// Compute path, possibly attrs relative.
|
||||
std::string target_path =
|
||||
object_name->to_string(kernel_memory()->virtual_membase());
|
||||
util::TranslateAnsiString(kernel_memory(), object_name);
|
||||
if (object_attrs->root_directory != 0xFFFFFFFD && // ObDosDevices
|
||||
object_attrs->root_directory != 0) {
|
||||
auto root_file = kernel_state()->object_table()->LookupObject<XFile>(
|
||||
@@ -571,7 +571,7 @@ dword_result_t NtQueryFullAttributesFile(
|
||||
|
||||
// Resolve the file using the virtual file system.
|
||||
auto entry = kernel_state()->file_system()->ResolvePath(
|
||||
object_name->to_string(kernel_memory()->virtual_membase()));
|
||||
util::TranslateAnsiString(kernel_memory(), object_name));
|
||||
if (entry) {
|
||||
// Found.
|
||||
file_info->creation_time = entry->create_timestamp();
|
||||
@@ -678,8 +678,7 @@ dword_result_t NtQueryDirectoryFile(
|
||||
uint32_t info = 0;
|
||||
|
||||
auto file = kernel_state()->object_table()->LookupObject<XFile>(file_handle);
|
||||
auto name =
|
||||
file_name ? file_name->to_string(kernel_memory()->virtual_membase()) : "";
|
||||
auto name = util::TranslateAnsiString(kernel_memory(), file_name);
|
||||
if (file) {
|
||||
X_FILE_DIRECTORY_INFORMATION dir_info = {0};
|
||||
result = file->QueryDirectory(file_info_ptr, length,
|
||||
@@ -732,7 +731,7 @@ dword_result_t NtOpenSymbolicLinkObject(
|
||||
kernel_memory()->TranslateVirtual<X_ANSI_STRING*>(object_attrs->name_ptr);
|
||||
|
||||
std::string target_path =
|
||||
object_name->to_string(kernel_memory()->virtual_membase());
|
||||
util::TranslateAnsiString(kernel_memory(), object_name);
|
||||
if (object_attrs->root_directory != 0) {
|
||||
assert_always();
|
||||
}
|
||||
|
||||
@@ -31,9 +31,10 @@ dword_result_t ObOpenObjectByName(lpunknown_t obj_attributes_ptr,
|
||||
// r5 = 0
|
||||
// r6 = out_ptr (handle?)
|
||||
|
||||
auto name =
|
||||
X_ANSI_STRING::to_string_indirect(kernel_memory()->virtual_membase(),
|
||||
obj_attributes_ptr.guest_address() + 4);
|
||||
auto name = util::TranslateAnsiStringAddress(
|
||||
kernel_memory(),
|
||||
xe::load_and_swap<uint32_t>(kernel_memory()->TranslateVirtual(
|
||||
obj_attributes_ptr.guest_address() + 4)));
|
||||
|
||||
X_HANDLE handle = X_INVALID_HANDLE_VALUE;
|
||||
X_STATUS result =
|
||||
@@ -177,8 +178,8 @@ DECLARE_XBOXKRNL_EXPORT1(ObDereferenceObject, kNone, kImplemented);
|
||||
|
||||
dword_result_t ObCreateSymbolicLink(pointer_t<X_ANSI_STRING> path,
|
||||
pointer_t<X_ANSI_STRING> target) {
|
||||
auto path_str = path->to_string(kernel_memory()->virtual_membase());
|
||||
auto target_str = target->to_string(kernel_memory()->virtual_membase());
|
||||
auto path_str = util::TranslateAnsiString(kernel_memory(), path);
|
||||
auto target_str = util::TranslateAnsiString(kernel_memory(), target);
|
||||
path_str = filesystem::CanonicalizePath(path_str);
|
||||
target_str = filesystem::CanonicalizePath(target_str);
|
||||
|
||||
@@ -197,7 +198,7 @@ dword_result_t ObCreateSymbolicLink(pointer_t<X_ANSI_STRING> path,
|
||||
DECLARE_XBOXKRNL_EXPORT1(ObCreateSymbolicLink, kNone, kImplemented);
|
||||
|
||||
dword_result_t ObDeleteSymbolicLink(pointer_t<X_ANSI_STRING> path) {
|
||||
auto path_str = path->to_string(kernel_memory()->virtual_membase());
|
||||
auto path_str = util::TranslateAnsiString(kernel_memory(), path);
|
||||
if (!kernel_state()->file_system()->UnregisterSymbolicLink(path_str)) {
|
||||
return X_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ dword_result_t RtlUnicodeStringToAnsiString(
|
||||
// _In_ BOOLEAN AllocateDestinationString
|
||||
|
||||
std::wstring unicode_str =
|
||||
source_ptr->to_string(kernel_memory()->virtual_membase());
|
||||
util::TranslateUnicodeString(kernel_memory(), source_ptr);
|
||||
std::string ansi_str = xe::to_string(unicode_str);
|
||||
if (ansi_str.size() > 0xFFFF - 1) {
|
||||
return X_STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
@@ -74,8 +74,10 @@ object_ref<T> LookupNamedObject(KernelState* kernel_state,
|
||||
if (!obj_attributes_ptr) {
|
||||
return nullptr;
|
||||
}
|
||||
auto name = X_ANSI_STRING::to_string_indirect(
|
||||
kernel_state->memory()->virtual_membase(), obj_attributes_ptr + 4);
|
||||
auto name = util::TranslateAnsiStringAddress(
|
||||
kernel_state->memory(),
|
||||
xe::load_and_swap<uint32_t>(
|
||||
kernel_state->memory()->TranslateVirtual(obj_attributes_ptr + 4)));
|
||||
if (!name.empty()) {
|
||||
X_HANDLE handle = X_INVALID_HANDLE_VALUE;
|
||||
X_RESULT result =
|
||||
|
||||
Reference in New Issue
Block a user