public void Can_obtain_all_folder_ids() { var knownFolderManager = (IKnownFolderManager)new KnownFolderManager(); uint count = 0; object ppIds = IntPtr.Zero; var h = GCHandle.Alloc(ppIds, GCHandleType.Pinned); try { knownFolderManager.GetFolderIds(h.AddrOfPinnedObject(), ref count); IntPtr pIds = (IntPtr)ppIds; if (IntPtr.Zero == pIds) { throw new InvalidOperationException("GetFolderIds returned NULL"); } try { var ids = new KNOWNFOLDERID[count]; var ptr = pIds.ToInt64(); for (uint u = 0; u < count; ++u) { ids[u] = (KNOWNFOLDERID)Marshal.PtrToStructure((IntPtr)ptr, typeof(KNOWNFOLDERID)); ptr += Marshal.SizeOf(typeof(KNOWNFOLDERID)); } foreach (var id in ids) { Assert.AreNotEqual(Guid.Empty, id.value); } } finally { Marshal.FreeCoTaskMem(pIds); } } finally { h.Free(); } }
private void RedirectOneFolder(KnownFolder folder, string newPath) { if (!folder.CanRedirect) { throw new InvalidOperationException(string.Format("Folder '{0}' cannot be redirected.", folder.Name)); } string currentPath = folder.Path; if (!this.ShouldProcess(folder.Name, string.Format("Redirect from {0} to {1}", currentPath, newPath))) { return; } if (!this.Force && !this.ShouldContinue("Do it?", "Folder redirection", ref this.yesToAll, ref this.noToAll)) { return; } var id = new KNOWNFOLDERID(folder.FolderId); var flags = KF_REDIRECT_FLAGS.KF_REDIRECT_NONE; if (this.CheckOnly) { flags |= KF_REDIRECT_FLAGS.KF_REDIRECT_CHECK_ONLY; } if (!this.DontMoveExistingData) { flags |= KF_REDIRECT_FLAGS.KF_REDIRECT_COPY_CONTENTS | KF_REDIRECT_FLAGS.KF_REDIRECT_DEL_SOURCE_CONTENTS; } string error; HResult hr = this.knownFolderManager.Redirect(ref id, IntPtr.Zero, flags, newPath, 0, null, out error); if (hr != HResult.S_OK) { if (string.IsNullOrEmpty(error)) { Marshal.ThrowExceptionForHR(unchecked((int)hr)); this.WriteWarning(string.Format("Redirection returned success code other than S_OK ({0})", hr)); } else { throw new TargetInvocationException( error, Marshal.GetExceptionForHR(unchecked((int)hr))); } } if (this.PassThru) { this.WriteObject(folder); } }
private IEnumerable<IKnownFolder> GetAll() { KNOWNFOLDERID[] ids; object boxpIds = IntPtr.Zero; var h = GCHandle.Alloc(boxpIds, GCHandleType.Pinned); try { uint count = 0; this.knownFolderManager.GetFolderIds(h.AddrOfPinnedObject(), ref count); IntPtr pIds = (IntPtr)boxpIds; if (IntPtr.Zero == pIds) { throw new InvalidOperationException("GetFolderIds returned NULL"); } try { ids = new KNOWNFOLDERID[count]; var ptr = pIds.ToInt64(); for (uint u = 0; u < count; ++u) { ids[u] = (KNOWNFOLDERID)Marshal.PtrToStructure((IntPtr)ptr, typeof(KNOWNFOLDERID)); ptr += Marshal.SizeOf(typeof(KNOWNFOLDERID)); } } finally { Marshal.FreeCoTaskMem(pIds); } } finally { h.Free(); } var result = ids.Select(kfi => this.GetKnownFolderById(kfi)); return result; }
private IKnownFolder GetKnownFolderById(KNOWNFOLDERID knownFolderId) { IKnownFolder nativeKnownFolder; try { this.knownFolderManager.GetFolder(ref knownFolderId, out nativeKnownFolder); } catch (FileNotFoundException x) { throw new FileNotFoundException(string.Format("Known folder not found: {0}", knownFolderId.value), x); } return nativeKnownFolder; }
private static void AssertSingleFolderOutput(KNOWNFOLDERID expectedId, Collection<PSObject> output) { Assert.IsNotNull(output); Assert.AreEqual(1, output.Count); var psObj = output.First(); Assert.IsNotNull(psObj); Assert.IsInstanceOfType(psObj.BaseObject, typeof(KnownFolder)); Assert.AreEqual(expectedId.value, ((KnownFolder)psObj.BaseObject).FolderId); }