Esempio n. 1
0
HANDLE _CreateDirectoryAndFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpsa, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile )
{
	HANDLE hFile =  ::CreateFile( lpFileName, dwDesiredAccess, dwShareMode, lpsa, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile );
	if( hFile == INVALID_HANDLE_VALUE ){
		const TCHAR* p = _tcsrchr(lpFileName, _T('\\'));
		if( p != NULL ){
			vector<TCHAR> dirPath(lpFileName, p + 1);
			dirPath.back() = _T('\0');
			_CreateDirectory(&dirPath.front());
			hFile =  ::CreateFile( lpFileName, dwDesiredAccess, dwShareMode, lpsa, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile );
		}
	}
	return hFile;
}
Esempio n. 2
0
HANDLE _CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile )
{
	SECURITY_DESCRIPTOR sd;
	SECURITY_ATTRIBUTES sa;
	 
	memset(&sd,0,sizeof(sd));
	InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
	SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
	memset(&sa,0,sizeof(sa));
	sa.nLength=sizeof(sa);
	sa.lpSecurityDescriptor=&sd;
/*
	PACL                pDacl;
	EXPLICIT_ACCESS     explicitAccess[3];
	SECURITY_ATTRIBUTES sa;
	SECURITY_DESCRIPTOR sd;

	InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);

	BuildExplicitAccessWithName(&explicitAccess[0], TEXT("SYSTEM"), FILE_ALL_ACCESS, GRANT_ACCESS, 0);
	BuildExplicitAccessWithName(&explicitAccess[1], TEXT("Administrators"), FILE_ALL_ACCESS, GRANT_ACCESS, 0);
	BuildExplicitAccessWithName(&explicitAccess[2], TEXT("Everyone"), FILE_ALL_ACCESS, GRANT_ACCESS, 0);
	SetEntriesInAcl(3, explicitAccess, NULL, &pDacl);

	SetSecurityDescriptorDacl(&sd, TRUE, pDacl, FALSE);

	sa.nLength              = sizeof(SECURITY_ATTRIBUTES);
	sa.lpSecurityDescriptor = &sd;
	sa.bInheritHandle       = FALSE;
*/
	HANDLE hFile =  ::CreateFile( lpFileName, dwDesiredAccess, dwShareMode, &sa, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile );
	if( hFile == INVALID_HANDLE_VALUE ){
		TCHAR* p = (TCHAR*)_tcsrchr(lpFileName, '\\');
		TCHAR* szDirPath = NULL;
		if( p != NULL ){
			int iSize = (int)(p - lpFileName);
			szDirPath = new TCHAR[iSize+1];
			_tcsncpy_s(szDirPath, iSize+1, lpFileName, iSize);
		}
		if( szDirPath != NULL ){
			_CreateDirectory(szDirPath);
			delete[] szDirPath;
			hFile =  ::CreateFile( lpFileName, dwDesiredAccess, dwShareMode, &sa, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile );
		}
	}
	return hFile;
}
Esempio n. 3
0
HANDLE _CreateFile2( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile )
{
	HANDLE hFile =  ::CreateFile( lpFileName, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile );
	if( hFile == INVALID_HANDLE_VALUE ){
		TCHAR* p = (TCHAR*)_tcsrchr(lpFileName, '\\');
		TCHAR* szDirPath = NULL;
		if( p != NULL ){
			int iSize = (int)(p - lpFileName);
			szDirPath = new TCHAR[iSize+1];
			_tcsncpy_s(szDirPath, iSize+1, lpFileName, iSize);
		}
		if( szDirPath != NULL ){
			_CreateDirectory(szDirPath);
			delete[] szDirPath;
			hFile =  ::CreateFile( lpFileName, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile );
		}
	}
	return hFile;
}
Esempio n. 4
0
void CSetDlgBasic::SaveIni()
{
	UpdateData(TRUE);
	WritePrivateProfileString(L"SET", L"DataSavePath", settingFolderPath.GetBuffer(0), commonIniPath);
	_CreateDirectory(settingFolderPath);

	int iNum = recFolderList.GetCount();
	CString strVal;
	strVal.Format( L"%d", iNum );
	WritePrivateProfileString(L"SET", L"RecFolderNum", strVal.GetBuffer(0), commonIniPath);
	for( int i = 0; i < iNum; i++ ){
		CString strKey = L"";
		strKey.Format(L"RecFolderPath%d", i );
		CString strFolder = L"";
		recFolderList.GetText( i, strFolder );
		WritePrivateProfileString(L"SET", strKey, strFolder, commonIniPath);
	}

	UpdateData(FALSE);
}
Esempio n. 5
0
//Implementation of DeviceCtrl routine.
static DWORD FatDeviceCtrl(__COMMON_OBJECT* lpDrv,__COMMON_OBJECT* lpDev, __DRCB* lpDrcb)
{
    __COMMON_OBJECT*       pFindHandle = NULL;

    if((NULL == lpDev) || (NULL == lpDrcb))  //Invalid parameters.
    {
        goto __TERMINAL;
    }
    //Dispatch the request to appropriate routines according to control command.
    switch(lpDrcb->dwCtrlCommand)
    {
    case IOCONTROL_FS_CHECKPARTITION:
        return CheckPartition(lpDev,(__COMMON_OBJECT*)lpDrcb->lpInputBuffer) ? 1 : 0;
    case IOCONTROL_FS_FINDFIRSTFILE:
        pFindHandle = _fat32FindFirstFile((__COMMON_OBJECT*)lpDev,
                                          (CHAR*)lpDrcb->dwExtraParam1,
                                          (FS_FIND_DATA*)lpDrcb->dwExtraParam2);
        if(NULL == pFindHandle)  //Can not start the iterate.
        {
            return 0;
        }
        lpDrcb->lpOutputBuffer = (LPVOID)pFindHandle;
        return 1;
    case IOCONTROL_FS_FINDNEXTFILE:
        return _FindNextFile((__COMMON_OBJECT*)lpDev,
                             (__COMMON_OBJECT*)lpDrcb->lpInputBuffer,
                             (FS_FIND_DATA*)lpDrcb->dwExtraParam2) ? 1 : 0;
    case IOCONTROL_FS_FINDCLOSE:
        _fat32FindClose((__COMMON_OBJECT*)lpDev,
                        (__COMMON_OBJECT*)lpDrcb->lpInputBuffer);
        break;
    case IOCONTROL_FS_CREATEDIR:
        if(_CreateDirectory(lpDev,
                            (LPSTR)lpDrcb->lpInputBuffer,
                            0))
        {
            lpDrcb->dwStatus = DRCB_STATUS_SUCCESS;
            return 1;
        }
        else
        {
            lpDrcb->dwStatus = DRCB_STATUS_FAIL;
            return 0;
        }
        break;
    case IOCONTROL_FS_GETFILEATTR:
        lpDrcb->dwExtraParam2 = _fat32GetFileAttributes(
                                    lpDev,
                                    (LPCTSTR)lpDrcb->dwExtraParam1);
        lpDrcb->dwStatus = DRCB_STATUS_SUCCESS;
        return 1;
        break;
    case IOCONTROL_FS_DELETEFILE:
        if(_fat32DeleteFile(lpDev,
                            (LPSTR)lpDrcb->lpInputBuffer))
        {
            lpDrcb->dwStatus = DRCB_STATUS_SUCCESS;
            return 1;
        }
        else
        {
            lpDrcb->dwStatus = DRCB_STATUS_FAIL;
            return 0;
        }
        break;
    case IOCONTROL_FS_REMOVEDIR:
        if(_RemoveDirectory(lpDev,
                            (LPSTR)lpDrcb->lpInputBuffer))
        {
            lpDrcb->dwStatus = DRCB_STATUS_SUCCESS;
            return 1;
        }
        else
        {
            lpDrcb->dwStatus = DRCB_STATUS_FAIL;
            return 0;
        }
        break;
    case IOCONTROL_FS_SETENDFILE:
    {
        if(_SetEndOfFile(lpDev))
        {
            lpDrcb->dwStatus = DRCB_STATUS_SUCCESS;
            return 1;
        }
        else
        {
            lpDrcb->dwStatus = DRCB_STATUS_FAIL;
            return 0;
        }
    }
    break;
    default:
        break;
    }

__TERMINAL:
    return 0;
}