const char16_t* WrapperDLL::Tool_SaveDialog(void* self,const char16_t* filterList,const char16_t* defaultPath){ auto self_ = (Tool*)self; auto arg0 = filterList; auto arg1 = defaultPath; auto ret = self_->SaveDialog(arg0,arg1); return ret; };
void TestDialog::OnButtonSelect( wxCommandEvent& event ) { //wxMessageBox(wxT("impl")); wxString DefaultDir = wxEmptyString ; //wxFileDialog SaveDialog(this, _("Save As"), DefaultDir, wxEmptyString, _("Image file(*.IMG)|*.IMG|All file(*.*)|*.*")); wxFileDialog SaveDialog(this, _("Save As"), DefaultDir, wxEmptyString, _("Image file(*.cpp)|*.cpp|All file(*.*)|*.*")); if (SaveDialog.ShowModal() == wxID_OK) { wxString path = SaveDialog.GetPath(); wxFileName FileName(path); if (!FileName.HasExt()) { path = path + _T(".IMG"); } //tDiskFile->SetValue(path); // wxMessageBox(path); if(wxFileExists(path)) { wxString OldName; // int OldSize; // if(GetImageInfo(path, OldName, OldSize)) // { // spDiskSize->SetValue(OldSize); // if(Operate == ADD && tDiskName->GetValue().IsEmpty()) // { // tDiskName->SetValue(OldName); // } } } }
static int OnDeleteFileClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); int nError = ERROR_SUCCESS; // Save the dialog variables SaveDialog(hDlg); // Choose what exactly to do switch(FileActionDialog(hDlg)) { case IDC_SIMPLE_DELETE: if(!DeleteFile(pData->szFileName1)) nError = GetLastError(); break; case IDC_FORCED_DELETE: nError = ForceRemoveFile(pData->szFileName1); break; default: return TRUE; } UpdateDialogButtons(hDlg); SetResultInfo(hDlg, nError); return TRUE; }
static int OnDeleteDirectoryClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); int nError = ERROR_SUCCESS; // Save the dialog variables SaveDialog(hDlg); // Choose what exactly to do switch(DirectoryActionDialog(hDlg)) { case IDC_SINGLE_DIRECTORY: if(!RemoveDirectory(pData->szFileName1)) nError = GetLastError(); break; case IDC_DIRECTORY_TREE: nError = RemoveDirectoryTree(pData->szFileName1); break; default: return TRUE; } SetResultInfo(hDlg, nError); return TRUE; }
static int OnGetFileAttributes(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); TFlagInfo * pFlags = FileAttributesValues; TCHAR szFileAttributes[512] = _T(""); DWORD dwAttr; int nError = ERROR_SUCCESS; SaveDialog(hDlg); dwAttr = GetFileAttributes(pData->szFileName1); if(dwAttr != INVALID_FILE_ATTRIBUTES) { for(int i = 0; pFlags->dwValue != 0; i++, pFlags++) { if(IS_FLAG_SET(pFlags, dwAttr)) { if(szFileAttributes[0] != 0) StringCchCat(szFileAttributes, _countof(szFileAttributes), _T("\n")); StringCchCat(szFileAttributes, _countof(szFileAttributes), pFlags->szFlagText); } } if(szFileAttributes[0] == 0) StringCchCopy(szFileAttributes, _countof(szFileAttributes), _T("0")); MessageBoxRc(hDlg, IDS_FILE_ATTRIBUTES, (UINT_PTR)szFileAttributes); } else nError = GetLastError(); SetResultInfo(hDlg, nError); return TRUE; }
static int OnMakeDirectoryClick(HWND hDlg) { OBJECT_ATTRIBUTES ObjAttr; IO_STATUS_BLOCK IoStatus = {0, 0}; UNICODE_STRING FileName; TFileTestData * pData = GetDialogData(hDlg); NTSTATUS Status = STATUS_SUCCESS; LPTSTR szDirectory = pData->szDirName; LPTSTR szPathPart = pData->szDirName; LPTSTR szTemp; USHORT SaveLength; // Get the values from dialog controls to the dialog data if(SaveDialog(hDlg) != ERROR_SUCCESS) return FALSE; // Initialize object attributes and the unicode string InitializeObjectAttributes(&ObjAttr, &FileName, OBJ_CASE_INSENSITIVE, NULL, NULL); RtlInitUnicodeString(&FileName, pData->szDirName); SaveLength = FileName.Length; // Now parse the directory as-is, create every sub-directory if(szDirectory[0] != 0) { // Now find the begin of the first directory part szPathPart = FindDirectoryPathPart(szDirectory); if(szPathPart != NULL) { while(szPathPart[0] != 0) { // Find either next backslash or end of string szTemp = FindNextPathSeparator(szPathPart); // Create the directory part FileName.Length = (USHORT)((szTemp - szDirectory) * sizeof(WCHAR)); Status = MyCreateDirectory(pData, &ObjAttr, &IoStatus); if(!NT_SUCCESS(Status)) break; // Go to the next part of the path FileName.Length = SaveLength; szPathPart = szTemp; } } else { Status = MyCreateDirectory(pData, &ObjAttr, &IoStatus); } } else { Status = MyCreateDirectory(pData, &ObjAttr, &IoStatus); } SetResultInfo(hDlg, Status, NULL, IoStatus.Information); return TRUE; }
bool Utils::SaveGameCollectionDialog(CString& strFile, FileType& fileType) { fileType = NONE; std::vector<CString> filter; std::vector<FileType> fileTypes; getSaveGameCollectionFilter(filter, fileTypes); return SaveDialog(strFile, fileType, filter, fileTypes); }
bool Utils::SaveLibraryDialog(CString& strFile, FileType& fileType) { fileType = NONE; std::vector<CString> filter; std::vector<FileType> fileTypes; getSaveLibraryFilter(filter, fileTypes); return SaveDialog(strFile, fileType, filter, fileTypes); }
void ExitDialog(HWND hw) { if (stats.is_changed()) { if (reader.is_first()) { SaveDialog(/*hw*/); } else switch(MessageBox( hw, "Save on exit?", "Save this file?", MB_YESNOCANCEL)) { case IDNO: break; case IDYES: SaveDialog(/*hw*/); break; case IDCANCEL: return; } } EndDialog( hw, 0 ); }
static int OnMakeDirectoryClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); LPTSTR szDirectory = pData->szDirName; LPTSTR szPathPart = pData->szDirName; LPTSTR szTemp; TCHAR chSaveChar; int nError = ERROR_SUCCESS; // Get the values from dialog controls to the dialog data if(SaveDialog(hDlg) != ERROR_SUCCESS) return FALSE; // Now parse the directory as-is, create every sub-directory if(szDirectory[0] != 0) { // Now find the begin of the first directory part szPathPart = FindDirectoryPathPart(szDirectory); if(szPathPart != NULL) { while(szPathPart[0] != 0) { // Find either next backslash or end of string szTemp = FindNextPathSeparator(szPathPart); // Create the directory part chSaveChar = szTemp[0]; szTemp[0] = 0; nError = MyCreateDirectory(pData, szDirectory); if(nError != ERROR_SUCCESS) break; // Go to the next part of the path szPathPart = szTemp; szTemp[0] = chSaveChar; } } else { nError = MyCreateDirectory(pData, szDirectory); } } else { nError = MyCreateDirectory(pData, szDirectory); } SetResultInfo(hDlg, nError, pData->hFile); return TRUE; }
static int OnMoveFileClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); int nError = ERROR_SUCCESS; SaveDialog(hDlg); // Perform the rename if(!MoveFileEx(pData->szFileName1, pData->szFileName2, pData->dwMoveFileFlags)) nError = GetLastError(); // Set the result SetResultInfo(hDlg, nError); return TRUE; }
void CCreateWaveDlg::OnBnClickedBegin() { RENDER_END EndType; int EndParam; CFamiTrackerDoc *pDoc = CFamiTrackerDoc::GetDoc(); CString FileName = pDoc->GetFileTitle(); CWavProgressDlg ProgressDlg; CFileDialog SaveDialog(FALSE, _T("wav"), FileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Microsoft PCM files (*.wav)|*.wav|All files (*.*)|*.*||")); // Close this dialog EndDialog(0); // Ask for file location if (SaveDialog.DoModal() == IDCANCEL) return; // Save if (IsDlgButtonChecked(IDC_RADIO_LOOP)) { EndType = SONG_LOOP_LIMIT; EndParam = GetFrameLoopCount(); } else if (IsDlgButtonChecked(IDC_RADIO_TIME)) { EndType = SONG_TIME_LIMIT; EndParam = GetTimeLimit(); } CFamiTrackerView *pView = CFamiTrackerView::GetView(); pView->UnmuteAllChannels(); // Mute selected channels for (int i = 0; i < m_ctlChannelList.GetCount(); ++i) { if (m_ctlChannelList.GetCheck(i) == 0) pView->ToggleChannel(i); } // m_sFileName = SaveDialog.GetPathName(); ProgressDlg.SetFile(SaveDialog.GetPathName().GetString()); ProgressDlg.SetOptions(EndType, EndParam); ProgressDlg.DoModal(); // Unmute all channels pView->UnmuteAllChannels(); }
static int OnNtQueryAttributesFile(HWND hDlg) { FILE_BASIC_INFORMATION BasicInfo; OBJECT_ATTRIBUTES ObjAttr; TFileTestData * pData = GetDialogData(hDlg); UNICODE_STRING FileName = {0, 0, NULL}; NTSTATUS Status; TCHAR szMsgText[512] = _T(""); // Save the current state of the dialog SaveDialog(hDlg); // Retrieve the NT name of the file InitializeObjectAttributes(&ObjAttr, &FileName, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = FileNameToUnicodeString(&FileName, pData->szFileName1); // Query the attributes if(NT_SUCCESS(Status)) { Status = NtQueryAttributesFile(&ObjAttr, &BasicInfo); if(NT_SUCCESS(Status)) { StringCchPrintf(szMsgText, _countof(szMsgText), _T("CreationTime: %08X-%08X\n") _T("LastAccessTime: %08X-%08X\n") _T("LastWriteTime: %08X-%08X\n") _T("ChangeTime: %08X-%08X\n") _T("FileAttributes: %08X"), BasicInfo.CreationTime.HighPart, BasicInfo.CreationTime.LowPart, BasicInfo.LastAccessTime.HighPart, BasicInfo.LastAccessTime.LowPart, BasicInfo.LastWriteTime.HighPart, BasicInfo.LastWriteTime.LowPart, BasicInfo.ChangeTime.HighPart, BasicInfo.ChangeTime.LowPart, BasicInfo.FileAttributes); MessageBoxRc(hDlg, IDS_FILE_BASIC_INFORMATION, (UINT_PTR)szMsgText); } } // Set the result information SetResultInfo(hDlg, Status); FreeFileNameString(&FileName); return TRUE; }
// Save game... menu command void SimpleGoFrame::SaveGame(wxCommandEvent& event) { char str[15]; time_t rawtime; time(&rawtime); strftime(str, 15, "%y%m%d-1.sgf", localtime(&rawtime)); for(int i=2; wxFileExists(str); i++) sprintf(str+6, "-%d.sgf", i); panel->gnugopause = true; wxFileDialog SaveDialog(this, "Save Game", "", str, "*.sgf", wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if(SaveDialog.ShowModal()==wxID_OK) { wxFile file(SaveDialog.GetPath(), wxFile::write); wxString escblackname(blackname), escwhitename(whitename); escblackname.Replace("\\", "\\\\"); escblackname.Replace("]", "\\]"); escwhitename.Replace("\\", "\\\\"); escwhitename.Replace("]", "\\]"); strftime(str, 15, "%Y-%m-%d", localtime(&rawtime)); file.Write(wxString::Format("(;FF[4]GM[1]SZ[%d]AP[Simple Go:%s]PB[%s]PW[%s]DT[%s]", panel->boardsize, VERSION, escblackname, escwhitename, str)); if((int)komi==komi) file.Write(wxString::Format("KM[%.0f]", komi)); else file.Write(wxString::Format("KM[%.1f]", komi)); if(panel->gnugoscore) file.Write(wxString::Format("RE[%s]", score)); for(int i=0; i<panel->totmove; i++) { if(panel->movelist[i].x==0&&panel->movelist[i].y==0) file.Write(wxString::Format(";%c[]", i%2 ? 'W' : 'B')); else file.Write(wxString::Format(";%c[%c%c]", i%2 ? 'W' : 'B', panel->movelist[i].x+'a'-1, panel->movelist[i].y+'a'-1)); } file.Write(")"); file.Close(); } }
long EditorWindow::onSaveAs(FXObject*, FXSelector, void*) { FXFileDialog SaveDialog(this, "Salva progetto"); FXString FileName; SaveDialog.setSelectMode(SELECTFILE_ANY); SaveDialog.setPatternList("Bezier Patch Project (*.bzp)"); SaveDialog.setFilename("Project.bzp"); if(SaveDialog.execute()) { FileName = SaveDialog.getFilename(); if(FXFile::exists(FileName)) { if(MBOX_CLICKED_NO == FXMessageBox::question(this, MBOX_YES_NO, "Progetto esistente", "Sovrascrivere il progetto: %s?", FileName.text())) return 1; } Log->addf("Editor :: Sto salvando %s", FileName.text()); PM->Save(FileName.text()); } else return 0; return 1; }
static int OnKillActive(HWND hDlg) { SaveDialog(hDlg); return TRUE; }
static int OnObjectIdMoreClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); FILE_OBJECTID_BUFFER ObjId = {0}; UINT_PTR nAction; HANDLE hFile = INVALID_HANDLE_VALUE; TCHAR szObjectID[0x40]; DWORD dwFlagsAndAttributes = 0; DWORD dwDesiredAccess = FILE_READ_ATTRIBUTES; DWORD dwBytesReturned; DWORD dwIoctlCode = FSCTL_CREATE_OR_GET_OBJECT_ID; int nError = ERROR_SUCCESS; // Ask the user for the action nAction = ObjectIDActionDialog(hDlg); if(nAction == IDCANCEL) return TRUE; SaveDialog(hDlg); // Use the proper desired access // Note that we also need restore privilege in order to succeed if(nAction == IDC_SET_OBJECT_ID) { dwFlagsAndAttributes = FILE_FLAG_BACKUP_SEMANTICS; dwDesiredAccess = FILE_WRITE_DATA; } // Convert the file name to the NT file name hFile = CreateFile(pData->szFileName1, dwDesiredAccess, 0, NULL, OPEN_EXISTING, dwFlagsAndAttributes, NULL); if(hFile == INVALID_HANDLE_VALUE) nError = GetLastError(); // Perform an action specific to if(nError == ERROR_SUCCESS) { switch(nAction) { case IDC_CREATE_OR_GET: case IDC_GET_OBJECT_ID: if(nAction == IDC_GET_OBJECT_ID) dwIoctlCode = FSCTL_GET_OBJECT_ID; memset(&ObjId, 0, sizeof(FILE_OBJECTID_BUFFER)); if(DeviceIoControl(hFile, dwIoctlCode, NULL, 0, &ObjId, sizeof(FILE_OBJECTID_BUFFER), &dwBytesReturned, NULL)) { ObjectIDToString(ObjId.ObjectId, pData->szFileName1, szObjectID); SetDlgItemText(hDlg, IDC_OBJECT_ID, szObjectID); } else { nError = GetLastError(); } break; case IDC_SET_OBJECT_ID: GetDlgItemText(hDlg, IDC_OBJECT_ID, szObjectID, _maxchars(szObjectID)); nError = StringToFileID(szObjectID, NULL, ObjId.ObjectId, NULL); if(nError != ERROR_SUCCESS) break; if(!DeviceIoControl(hFile, FSCTL_SET_OBJECT_ID, &ObjId, sizeof(FILE_OBJECTID_BUFFER), NULL, 0, &dwBytesReturned, NULL)) { nError = GetLastError(); } break; } } if(hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); SetResultInfo(hDlg, nError); return TRUE; }
// Querying the file ID from the file itself static int OnFileIdGetClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); OBJECT_ATTRIBUTES ObjAttr; IO_STATUS_BLOCK IoStatus; UNICODE_STRING FolderName = {0, 0, NULL}; UNICODE_STRING FileName = {0, 0, NULL}; ULARGE_INTEGER FileId = {0}; NTSTATUS Status = STATUS_SUCCESS; HANDLE Handle = NULL; TCHAR szFileID[MAX_FILEID_PATH]; BYTE InfoBuff[0x200]; // Convert the file name to the NT file name if(NT_SUCCESS(Status)) { SaveDialog(hDlg); Status = FileNameToUnicodeString(&FolderName, pData->szFileName1); } // Get the directory name from the file name if(NT_SUCCESS(Status)) { PWSTR sz = FolderName.Buffer + (FolderName.Length / sizeof(WCHAR)); // Go back and find the last directory name while(sz > FolderName.Buffer && sz[0] != L'\\') sz--; // Did we find it? if(sz[0] == L'\\' && sz > FolderName.Buffer) { // Initialize the file name sz = sz + 1; RtlInitUnicodeString(&FileName, sz); // Cut the folder name. Make sure that the ending backslash is there, // because we don't want to open "\??\C:" instead of "\??\C:\" FolderName.MaximumLength = FolderName.Length = (USHORT)((sz - FolderName.Buffer) * sizeof(WCHAR)); // Attempt to open the folder and query the ID InitializeObjectAttributes(&ObjAttr, &FolderName, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = NtOpenFile(&Handle, FILE_READ_DATA | SYNCHRONIZE, &ObjAttr, &IoStatus, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SYNCHRONOUS_IO_ALERT); // If succeeded, we call for query directory on thet file if(NT_SUCCESS(Status)) { PFILE_ID_BOTH_DIR_INFORMATION pDirInfo = (PFILE_ID_BOTH_DIR_INFORMATION)InfoBuff; Status = NtQueryDirectoryFile(Handle, NULL, NULL, NULL, &IoStatus, pDirInfo, sizeof(InfoBuff), FileIdBothDirectoryInformation, TRUE, &FileName, FALSE); if(NT_SUCCESS(Status)) FileId.QuadPart = pDirInfo->FileId.QuadPart; NtClose(Handle); } } else { // Do it by Open - QueryID - Close InitializeObjectAttributes(&ObjAttr, &FileName, OBJ_CASE_INSENSITIVE, NULL, NULL); Status = NtOpenFile(&Handle, FILE_READ_ATTRIBUTES, &ObjAttr, &IoStatus, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0); if(NT_SUCCESS(Status)) { PFILE_INTERNAL_INFORMATION pFileInfo = (PFILE_INTERNAL_INFORMATION)InfoBuff; Status = NtQueryInformationFile(Handle, &IoStatus, pFileInfo, sizeof(FILE_INTERNAL_INFORMATION), FileInternalInformation); if(NT_SUCCESS(Status)) FileId.QuadPart = pFileInfo->IndexNumber.QuadPart; NtClose(Handle); } } } // Did we query the file ID just fine? if(NT_SUCCESS(Status)) { FileIDToString(pData, FileId.QuadPart, szFileID); SetDlgItemText(hDlg, IDC_FILE_ID, szFileID); } // On the end, set the file ID SetResultInfo(hDlg, RtlNtStatusToDosError(Status)); FreeFileNameString(&FolderName); return TRUE; }
static int OnCreateFileClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); HANDLE hTemplateFile = NULL; int nError = ERROR_SUCCESS; // Close the handle, if already open if(IsHandleValid(pData->hFile)) OnCloseHandleClick(hDlg); // Get the values from dialog controls to the dialog data if(SaveDialog(hDlg) != ERROR_SUCCESS) return FALSE; // Change the directory (If any) if(pData->szDirName[0] != 0) { if(!SetCurrentDirectory(pData->szDirName)) { nError = GetLastError(); SetResultInfo(hDlg, nError, INVALID_HANDLE_VALUE); return TRUE; } } // Prepare the template file if(nError == ERROR_SUCCESS && pData->szTemplate[0] != 0) { hTemplateFile = CreateFile(pData->szTemplate, FILE_READ_EA, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if(hTemplateFile == INVALID_HANDLE_VALUE) nError = GetLastError(); } // Prepare the file open if(nError == ERROR_SUCCESS) { if(pData->bUseTransaction == FALSE) { // Invoke breakpoint if the user wants to if(IsDlgButtonChecked(hDlg, IDC_BREAKPOINT) == BST_CHECKED) DebugBreak(); pData->hFile = CreateFile(pData->szFileName1, pData->dwDesiredAccess, pData->dwShareAccess, NULL, pData->dwCreateDisposition1, pData->dwFileAttributes, hTemplateFile); } else { // Invoke breakpoint if the user wants to if(IsDlgButtonChecked(hDlg, IDC_BREAKPOINT) == BST_CHECKED) DebugBreak(); pData->hFile = pfnCreateFileTransacted(pData->szFileName1, pData->dwDesiredAccess, pData->dwShareAccess, NULL, pData->dwCreateDisposition1, pData->dwFileAttributes, hTemplateFile, pData->hTransaction, NULL, NULL); } if(IsHandleInvalid(pData->hFile)) nError = GetLastError(); } if(IsHandleValid(hTemplateFile)) CloseHandle(hTemplateFile); SetResultInfo(hDlg, nError, pData->hFile); return TRUE; }
static int OnKillActive(HWND hDlg) { SaveDialog(hDlg); UpdateDialogButtons(hDlg); return TRUE; }
static int OnCreateFileClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); OBJECT_ATTRIBUTES ObjAttr; IO_STATUS_BLOCK IoStatus; UNICODE_STRING FileName; UNICODE_STRING DirName; LARGE_INTEGER AllocationSize; NTSTATUS Status = STATUS_SUCCESS; HANDLE SaveTransactionHandle = NULL; TCHAR szFileName[MAX_NT_PATH]; TCHAR szDirName[MAX_NT_PATH]; DWORD cbObjectID = 0; BYTE ObjectID[0x10]; // Close the handle, if already open if(IsHandleValid(pData->hDirectory) || IsHandleValid(pData->hFile)) OnNtCloseClick(hDlg); // Get the various create options if(SaveDialog(hDlg) != ERROR_SUCCESS) return FALSE; if(pData->bUseTransaction && pfnRtlSetCurrentTransaction != NULL) { SaveTransactionHandle = pfnRtlGetCurrentTransaction(); pfnRtlSetCurrentTransaction(pData->hTransaction); } // Get the directory name from the dialog data StringCchCopy(szDirName, _countof(szDirName), pData->szDirName); StringCchCopy(szFileName, _countof(szFileName), pData->szFileName1); // If we are about to open a file by ID, and we have no relative directory, // try to take the directory from the file name if(szDirName[0] == 0 && (pData->dwCreateOptions & FILE_OPEN_BY_FILE_ID)) { LPTSTR szFullName = pData->szFileName1; LPTSTR szFileId = _tcsrchr(szFullName, _T('\\')); size_t nLength = szFileId - szFullName + 1; if(szFileId != NULL) { StringCchCopy(szDirName, nLength, szFullName); StringCchCopy(szFileName, _countof(szFileName), szFileId + 1); } } // Open the relative file (if any) if(szDirName[0] != 0) { RtlInitUnicodeString(&DirName, szDirName); InitializeObjectAttributes(&ObjAttr, &DirName, pData->dwObjAttrFlags, 0, NULL); Status = NtOpenFile(&pData->hDirectory, pData->dwDesiredAccessRF, &ObjAttr, &IoStatus, pData->dwShareAccessRF, pData->dwOpenOptionsRF); if(!NT_SUCCESS(Status)) { SetResultInfo(hDlg, Status, NULL, IoStatus.Information); return TRUE; } } // Prepare the file open if(NT_SUCCESS(Status)) { RtlInitUnicodeString(&FileName, szFileName); // If open by ID required, set the ID to the string if(pData->dwCreateOptions & FILE_OPEN_BY_FILE_ID) { // Convert object ID to binary value if(StringToFileID(szFileName, NULL, ObjectID, &cbObjectID) != ERROR_SUCCESS) return TRUE; // Set the object ID to the UNICODE_STRING FileName.MaximumLength = FileName.Length = (USHORT)cbObjectID; FileName.Buffer = (PWSTR)ObjectID; } ZeroMemory(&IoStatus, sizeof(IO_STATUS_BLOCK)); InitializeObjectAttributes(&ObjAttr, &FileName, pData->dwObjAttrFlags, pData->hDirectory, NULL); AllocationSize.QuadPart = (LONGLONG)pData->AllocationSize; // Invoke breakpoint if the user wants to if(IsDlgButtonChecked(hDlg, IDC_BREAKPOINT) == BST_CHECKED) DebugBreak(); Status = NtCreateFile(&pData->hFile, pData->dwDesiredAccess, &ObjAttr, &IoStatus, &AllocationSize, pData->dwFileAttributes, pData->dwShareAccess, pData->dwCreateDisposition2, pData->dwCreateOptions, pData->pFileEa, pData->dwEaSize); SetResultInfo(hDlg, Status, pData->hFile, IoStatus.Information); // If this operation failed, we close the directory as well if(!NT_SUCCESS(Status) && pData->hDirectory != NULL) { NtClose(pData->hDirectory); pData->hDirectory = NULL; } } if(pData->bUseTransaction && pfnRtlSetCurrentTransaction != NULL) { pfnRtlSetCurrentTransaction(SaveTransactionHandle); SaveTransactionHandle = NULL; } return TRUE; }