private static IEnumerable <string> GetStreams_Vista(String sPath) { if (sPath == null) { throw new ArgumentNullException("sPath"); } WIN32_FIND_STREAM_DATA findStreamData = new WIN32_FIND_STREAM_DATA(); SafeFindHandle handle = FindFirstStreamW(sPath, StreamInfoLevels.FindStreamInfoStandard, findStreamData, 0); if (handle.IsInvalid) { throw new Win32Exception(); } try { do { yield return(findStreamData.cStreamName); } while (FindNextStreamW(handle, findStreamData)); int lastError = Marshal.GetLastWin32Error(); if (lastError != ERROR_HANDLE_EOF) { throw new Win32Exception(lastError); } } finally { handle.Dispose(); } }
private static void Addto(FILL_FIND_STREAM_DATA fill, DokanFileInfo rawFileInfo, FileInformation fi) { var data = new WIN32_FIND_STREAM_DATA { StreamSize = fi.Length, cStreamName = fi.FileName }; //ZeroMemory(&data, sizeof(WIN32_FIND_DATAW)); fill(ref data, rawFileInfo); }
private static extern bool FindNextStreamW(SafeFindHandle hndFindFile, [In, Out, MarshalAs(UnmanagedType.LPStruct)] WIN32_FIND_STREAM_DATA lpFindStreamData);
private static extern SafeFindHandle FindFirstStreamW( string lpFileName, StreamInfoLevels InfoLevel, [In, Out, MarshalAs(UnmanagedType.LPStruct)] WIN32_FIND_STREAM_DATA lpFindStreamData, uint dwFlags);
public static extern bool FindNextStreamW([InAttribute()] SafeFindStreamHandle hFindStream, ref WIN32_FIND_STREAM_DATA lpFindStreamData);
public static extern SafeFindStreamHandle FindFirstStreamW([InAttribute()][MarshalAsAttribute(UnmanagedType.LPWStr)] string lpFileName, STREAM_INFO_LEVELS InfoLevel, ref WIN32_FIND_STREAM_DATA lpFindStreamData, uint dwFlags);