diff --git a/src/core/kernel/init/CxbxKrnl.cpp b/src/core/kernel/init/CxbxKrnl.cpp index 382437d4b..d412cd806 100644 --- a/src/core/kernel/init/CxbxKrnl.cpp +++ b/src/core/kernel/init/CxbxKrnl.cpp @@ -1448,9 +1448,6 @@ __declspec(noreturn) void CxbxKrnlInit if (CxbxTitleDeviceDriveIndex == -1 || lastFind != std::string::npos) { #endif CxbxCreateSymbolicLink(DriveD, relative_path); - // Arrange that the Xbe path can reside outside the partitions, and put it to g_hCurDir : - EmuNtSymbolicLinkObject* xbePathSymbolicLinkObject = FindNtSymbolicLinkObjectByDriveLetter(CxbxAutoMountDriveLetter); - g_hCurDir = xbePathSymbolicLinkObject->RootDirectoryHandle; } } diff --git a/src/core/kernel/support/EmuFile.cpp b/src/core/kernel/support/EmuFile.cpp index 358168265..caff3b2ec 100644 --- a/src/core/kernel/support/EmuFile.cpp +++ b/src/core/kernel/support/EmuFile.cpp @@ -715,8 +715,12 @@ xbox::ntstatus_xt CxbxCreateSymbolicLink(std::string SymbolicLinkName, std::stri SymbolicLinkObject = new EmuNtSymbolicLinkObject(); result = SymbolicLinkObject->Init(SymbolicLinkName, FullPath); - if (result != xbox::status_success) + if (result != xbox::status_success) { SymbolicLinkObject->NtClose(); + } + else if (SymbolicLinkObject->DriveLetter == CxbxAutoMountDriveLetter) { + g_hCurDir = SymbolicLinkObject->RootDirectoryHandle; + } return result; } @@ -807,6 +811,9 @@ NTSTATUS EmuNtSymbolicLinkObject::Init(std::string aSymbolicLinkName, std::strin if (DriveLetter >= 'A' && DriveLetter <= 'Z') { NtSymbolicLinkObjects[DriveLetter - 'A'] = NULL; NtDll::NtClose(RootDirectoryHandle); + if (DriveLetter == CxbxAutoMountDriveLetter) { + g_hCurDir = NULL; + } } }