Go to file
David Hall 38db67b78b Updated project files for 1.0.17 release 2018-07-26 22:54:41 -06:00
Core Added static methods for bit manipulation in BitHelper class. 2018-07-26 16:48:06 -06:00
HelpBuilder Updated correlation reports and project files after fixing analysis tool 2018-07-07 21:35:28 -06:00
PInvoke Updated project files for 1.0.17 release 2018-07-26 22:54:41 -06:00
Security Updated correlation reports and project files after fixing analysis tool 2018-07-07 21:35:28 -06:00
System Improved NetworkListManager 2018-07-21 14:14:26 -06:00
UnitTests Updated project files for 1.0.17 release 2018-07-26 22:54:41 -06:00
WIndows.Forms Updated correlation reports and project files after fixing analysis tool 2018-07-07 21:35:28 -06:00
Windows.Shell Updated correlation reports and project files after fixing analysis tool 2018-07-07 21:35:28 -06:00
docs/icons markdown doesn't work in docs so moving to wiki 2017-12-06 17:28:00 -07:00
.gitattributes Add initial files 2017-11-27 10:03:14 -07:00
.gitignore Updated projects to 1.0.4, added release notes, and updated correlation reports. 2017-12-10 18:45:07 -07:00
LICENSE Add initial files 2017-11-27 10:03:14 -07:00
README.md Updated project files for 1.0.17 release 2018-07-26 22:54:41 -06:00
Vanara.sln Improved NetworkListManager 2018-07-21 14:14:26 -06:00

README.md

Vanara

In a number of projects I have needed to use native API calls. Over the years I have collected quite a few of these interop code chunks and I decided to pull them all together into a set of reusable libraries. I have tried to carve up the libraries into small enough chunks that they are easy to identify and consume. The only problem with this is that you can literally end up with over 20 dependencies on some of the higher function libraries (oh well).

I have tried to follow the concepts below in laying out the libraries.

  • All functions that are imported from a single DLL should be placed into a single assembly that is named after the DLL
    • (e.g. The assembly Vanara.PInvoke.Gdi32.dll hosts all functions and supporting enumerations, constants and structures that are exported from gdi32.dll in the system directory.)
  • Any structure or macro or enumeration (no function) that is used by many libraries is put into either Vanara.Core or Vanara.PInvoke.Shared
    • (e.g. The macro HIWORD and the structure SIZE are both in Vanara.PInvoke.Shared and classes to simplfy interop calls and native memory management are in Vanara.Core.)
  • Inside a project, all constructs are contained in a file named after the header file (*.h) in which they are defined in the Windows API
    • (e.g. In the Vanara.PInvoke.Kernel32 project directory, you'll find a FileApi.cs, a WinBase.cs and a WinNT.cs file representing fileapi.h, winbase.h and winnt.h respectively.)
  • Where the direct interpretation of a structure leads to memory leaks or misuse, I have tried to simplify their use
  • Where structures are always passed by reference and where that structure needs to clean up memory allocations, I have changed the structure to a class implementing IDisposable.
  • Wherever possible, all handles have been turned into SafeHandle derivatives.
  • Wherever possible, all functions that allocate memory that is to be freed by the caller use a safe memory handle.
  • All PInvoke calls are in assemblies prefixed by Vanara.PInvoke
  • If there are classes or extensions that make use of the PInvoke calls, they are in wrapper assemblies prefixed by Vanara and then followed by a logical name for the functionality. Today, those are Core, Security, SystemServices, Windows.Forms and Windows.Shell.

Installation

This project's assemblies are available via NuGet.

NuGet Link Assembly Description Dependencies
NuGet Package Vanara.Core Shared methods, structures and constants for use throughout the Vanara assemblies. Think of it as windows.h with some useful extensions. None
NuGet Package Vanara.PInvoke.Shared Shared methods, structures and constants for use throughout the Vanara.PInvoke assemblies Vanara.Core
NuGet Package Vanara.PInvoke.AclUI
Coverage
Methods, structures and constants imported from AclUI.dll Vanara.PInvoke.Security
NuGet Package Vanara.PInvoke.BITS
Coverage
Methods, structures and constants imported from qmgr.dll for Background Intelligent Transfer Service (BITS) Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.ComCtl32
Coverage
Methods, structures and constants imported from ComCtl32.dll Vanara.PInvoke.User32
NuGet Package Vanara.PInvoke.CredUI
Coverage
Methods, structures and constants imported from CredUI.dll Vanara.PInvoke.Security
NuGet Package Vanara.PInvoke.Crypt32
Coverage
Methods, structures and constants imported from Crypt32.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.DwmApi
Coverage
Methods, structures and constants imported from DwmApi.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.Gdi32
Coverage
Methods, structures and constants imported from Gdi32.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.IpHlpApi
Coverage
Methods, structures and constants imported from IpHlpApi.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.Kernel32
Coverage
Methods, structures and constants imported from Kernel32.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.Mpr
Coverage
Methods, structures and constants imported from Mpr.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.NetApi32
Coverage
Methods, structures and constants imported from NetApi32.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.NetListMgr
Coverage
Methods, structures and constants imported from NetListMgr.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.NTDSApi
Coverage
Methods, structures and constants imported from NTDSApi.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.Ole
Coverage
Methods, structures and constants imported from Ole32.dll, OleAut32 and PropSys.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.Security
Coverage
Methods, structures and constants imported from AdvApi32.dll, Authz.dll and Secur32.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.Shell32
Coverage
Methods, structures and constants imported from Shell32.dll Vanara.PInvoke.ComCtl32, Vanara.PInvoke.Ole, Vanara.PInvoke.Security
NuGet Package Vanara.PInvoke.ShlwApi
Coverage
Methods, structures and constants imported from ShlwApi.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.TaskSchd
Coverage
Methods, structures and constants imported from TaskSchd.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.User32
Coverage
Methods, structures and constants imported from User32.dll Vanara.PInvoke.Kernel32
NuGet Package Vanara.PInvoke.User32.Gdi
Coverage
Methods, structures and constants imported from User32.dll that have GDI references Vanara.PInvoke.Gdi32, Vanara.PInvoke.Kernel32
NuGet Package Vanara.PInvoke.UxTheme
Coverage
Methods, structures and constants imported from UxTheme.dll Vanara.PInvoke.Gdi32
NuGet Package Vanara.PInvoke.VirtDisk
Coverage
Methods, structures and constants imported from VirtDisk.dll Vanara.PInvoke.Shared
NuGet Package Vanara.PInvoke.WinINet
Coverage
Methods, structures and constants imported from WinINet.dll Vanara.PInvoke.Shared
NuGet Package Vanara.Security Wrapper classes for security related items in the PInvoke libraries Vanara.PInvoke.NTDSApi, Vanara.PInvoke.Security
NuGet Package Vanara.SystemServices Wrapper classes for system related items in the PInvoke libraries Vanara.PInvoke.Kernel32, Vanara.PInvoke.NetListMgr, Vanara.PInvoke.VirtDisk
NuGet Package Vanara.Windows.Forms Classes for user interface related items derived from the Vanara PInvoke libraries. Includes extensions for almost all common controls to give post Vista capabilities, WinForms controls (panel, commandlink, enhanced combo boxes, IPAddress, split button, trackbar and themed controls), shutdown/restart/lock control, buffered painting, resource files, access control editor, simplifed designer framework for Windows.Forms. Vanara.PInvoke.AclUI, Vanara.PInvoke.CredUI, Vanara.PInvoke.ComCtl32, Vanara.PInvoke.DwmApi, Vanara.PInvoke.UxTheme
NuGet Package Vanara.Windows.Shell Classes for Windows Shell items derived from the Vanara PInvoke libraries. Includes shell items, files, icons, links, and taskbar lists. Vanara.PInvoke.Shell32

Sample Code

There are numerous examples in the UnitTest folder.