diff --git a/src/siadrive_dokan_api/siadokandrive.cpp b/src/siadrive_dokan_api/siadokandrive.cpp index 3a8030d..a01468c 100644 --- a/src/siadrive_dokan_api/siadokandrive.cpp +++ b/src/siadrive_dokan_api/siadokandrive.cpp @@ -635,12 +635,13 @@ private: NTSTATUS ret = STATUS_SUCCESS; auto siaFileTree = GetFileTree(); - auto siaFile = siaFileTree ? siaFileTree->GetFile(openFileInfo->SiaPath) : nullptr; + auto siaFile = siaFileTree && openFileInfo ? siaFileTree->GetFile(openFileInfo->SiaPath) : nullptr; + SString cachFileLocation = openFileInfo ? openFileInfo->CacheFilePath : FilePath(GetCacheLocation(), fileName); - HANDLE tempHandle = openFileInfo->FileHandle; + HANDLE tempHandle = openFileInfo ? openFileInfo->FileHandle : nullptr; if (!siaFile && (!tempHandle || (tempHandle == INVALID_HANDLE_VALUE))) { - tempHandle = ::CreateFile(&openFileInfo->CacheFilePath[0], GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); + tempHandle = ::CreateFile(&cachFileLocation[0], GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); if (tempHandle == INVALID_HANDLE_VALUE) { ret = DokanNtStatusFromWin32(::GetLastError()); @@ -653,7 +654,7 @@ private: if (ret == STATUS_SUCCESS) { - if (openFileInfo->Dummy) + if (openFileInfo && openFileInfo->Dummy) { LARGE_INTEGER li = { 0 }; li.QuadPart = siaFile->GetFileSize(); @@ -668,12 +669,12 @@ private: // in this case, FindFirstFile can't get directory information if (wcscmp(fileName, L"\\") == 0) { - handleFileInfo->dwFileAttributes = ::GetFileAttributes(&openFileInfo->CacheFilePath[0]); + handleFileInfo->dwFileAttributes = ::GetFileAttributes(&cachFileLocation[0]); } else { WIN32_FIND_DATA find = { 0 }; - HANDLE findHandle = ::FindFirstFile(&openFileInfo->CacheFilePath[0], &find); + HANDLE findHandle = ::FindFirstFile(&cachFileLocation[0], &find); if (findHandle == INVALID_HANDLE_VALUE) { DWORD error = ::GetLastError();