NTSTATUS DokanSetRenameInformation( PEVENT_CONTEXT EventContext, PDOKAN_FILE_INFO FileInfo, PDOKAN_OPERATIONS DokanOperations) { PDOKAN_RENAME_INFORMATION renameInfo = (PDOKAN_RENAME_INFORMATION)((PCHAR)EventContext + EventContext->Operation.SetFile.BufferOffset); WCHAR newName[MAX_PATH]; ZeroMemory(newName, sizeof(newName)); if (renameInfo->FileName[0] != L'\\') { ULONG pos; for (pos = EventContext->Operation.SetFile.FileNameLength / sizeof(WCHAR); pos != 0; --pos) { if (EventContext->Operation.SetFile.FileName[pos] == '\\') break; } RtlCopyMemory(newName, EventContext->Operation.SetFile.FileName, (pos + 1)*sizeof(WCHAR)); RtlCopyMemory((PCHAR)newName + (pos+1)*sizeof(WCHAR), renameInfo->FileName, renameInfo->FileNameLength); } else { RtlCopyMemory(newName, renameInfo->FileName, renameInfo->FileNameLength); } if (!DokanOperations->MoveFile) return STATUS_NOT_IMPLEMENTED; return DokanOperations->MoveFile( EventContext->Operation.SetFile.FileName, newName, renameInfo->ReplaceIfExists, FileInfo); }