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; }
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; }