Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 400 of file istream.c.
Referenced by OpenStreamOnFile(), and SHCreateStreamOnFileW().
{ DWORD dwAccess, dwShare, dwCreate; HANDLE hFile; TRACE("(%s,%d,0x%08X,%d,%p,%p)\n", debugstr_w(lpszPath), dwMode, dwAttributes, bCreate, lpTemplate, lppStream); if (!lpszPath || !lppStream || lpTemplate) return E_INVALIDARG; *lppStream = NULL; /* Access */ switch (STGM_ACCESS_MODE(dwMode)) { case STGM_READWRITE: dwAccess = GENERIC_READ|GENERIC_WRITE; break; case STGM_WRITE: dwAccess = GENERIC_WRITE; break; case STGM_READ: dwAccess = GENERIC_READ; break; default: return E_INVALIDARG; } /* Sharing */ switch (STGM_SHARE_MODE(dwMode)) { case 0: dwShare = FILE_SHARE_READ|FILE_SHARE_WRITE; break; case STGM_SHARE_DENY_READ: dwShare = FILE_SHARE_WRITE; break; case STGM_SHARE_DENY_WRITE: dwShare = FILE_SHARE_READ; break; case STGM_SHARE_EXCLUSIVE: dwShare = 0; break; case STGM_SHARE_DENY_NONE: dwShare = FILE_SHARE_READ|FILE_SHARE_WRITE; break; default: return E_INVALIDARG; } switch(STGM_CREATE_MODE(dwMode)) { case STGM_FAILIFTHERE: dwCreate = bCreate ? CREATE_NEW : OPEN_EXISTING; break; case STGM_CREATE: dwCreate = CREATE_ALWAYS; break; default: return E_INVALIDARG; } /* Open HANDLE to file */ hFile = CreateFileW(lpszPath, dwAccess, dwShare, NULL, dwCreate, dwAttributes, 0); if(hFile == INVALID_HANDLE_VALUE) return HRESULT_FROM_WIN32(GetLastError()); *lppStream = IStream_Create(lpszPath, hFile, dwMode); if(!*lppStream) { CloseHandle(hFile); return E_OUTOFMEMORY; } return S_OK; }