Go to file
David Hall 33b358033d Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07:00
.github/ISSUE_TEMPLATE Update issue templates 2018-09-05 07:21:40 -06:00
Core Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07:00
HelpBuilder Updated project files for 2.0.1 2018-11-30 14:34:07 -07:00
PInvoke Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07:00
Security Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07:00
System Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07:00
UnitTests Further additions, corrections and tests for PInvoke.Cryptography 2018-12-05 12:38:06 -07:00
WIndows.Forms Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07:00
Windows.Shell Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07: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 Added extension methods for NetworkInterface and subtypes. 2018-09-13 18:19:43 -06:00
LICENSE Add initial files 2017-11-27 10:03:14 -07:00
README.md Updated for 2.0 2018-12-01 11:32:55 -07:00
Vanara.sln Removed Crypt32 project 2018-12-03 16:11:20 -07:00
Vanara.snk Updated project information to version 2.0.1 and signed all assemblies. 2018-12-07 13:53:39 -07:00

README.md

Vanara

This project contains various .NET assemblies that contain P/Invoke functions, interfaces, enums and structures from Windows libraries. Each assembly is associated with one or a few tightly related libraries. For example, Shlwapi.dll has all the exported functions from shlwapi.lib; Kernel32.dll has all for both kernel32.lib and kernelbase.lib.

All assemblies are available via NuGet and provide builds against .NET 2.0, 3.5, 4.0 and 4.5. In all cases where a dependency doesn't disallow it, a .NET Standard 2.0 build is also included for use with UWP and other .NET Core and Standard projects.

Use

  1. Look for the function you need in Microsoft documentation. Note which library or DLL the function is in.
  2. Confirm the Vanara library exists and has your function by looking at the Supported Libraries table below. Clicking on the Assembly link will take you to a drill down of that assembly's coverage. Find your function and if there is a matching implementation it will appear to the right.
  3. Add the assembly to your project via NuGet.
  4. To use the function, you can:
    1. Call it directly var bret = Vanara.PInvoke.Kernel32.GetComputerName(sb, ref sbSz);
    2. Under C# 6.0 and later, use a static using directive and call it:
    using static Vanara.PInvoke.Kernel32;
    
    var bret = GetComputerName(sb, ref sbSz);
    

Design Concepts

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 named after the Windows API handle. If those handles require a call to a function to release/close/destroy, a derived SafeHANDLE exists that performs that function on disposal.
    • e.g. HTOKEN is defined. SafeHTOKEN builds upon that handle with an automated release calling CloseHandle.
  • 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 a structure is to passed into a function, that structure is marshaled using the in statement which will pass the structure by reference without requiring the ref keyword.
    • Windows API: BOOL MapDialogRect(HWND hDlg, LPRECT lpRect)
    • Vanara: bool MapDialogRect(HWND hDlg, in RECT lpRect);
  • 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.

Supported Libraries

Library/DLL Assembly NuGet Link
AclUI.dll Vanara.PInvoke.AclUI
Coverage
NuGet Package
qmgr.dll (BITS) Vanara.PInvoke.BITS
Coverage
NuGet Package
ComCtl32.dll Vanara.PInvoke.ComCtl32
Coverage
NuGet Package
CredUI.dll Vanara.PInvoke.CredUI
Coverage
NuGet Package
Crypt32.dll Vanara.PInvoke.Crypt32
Coverage
NuGet Package
DwmApi.dll Vanara.PInvoke.DwmApi
Coverage
NuGet Package
Gdi32.dll Vanara.PInvoke.Gdi32
Coverage
NuGet Package
IpHlpApi.dll Vanara.PInvoke.IpHlpApi
Coverage
NuGet Package
Kernel32.dll and KernelBase.dll Vanara.PInvoke.Kernel32
Coverage
NuGet Package
Mpr.dll Vanara.PInvoke.Mpr
Coverage
NuGet Package
NetApi32.dll Vanara.PInvoke.NetApi32
Coverage
NuGet Package
NetListMgr.dll Vanara.PInvoke.NetListMgr
Coverage
NuGet Package
NTDSApi.dll Vanara.PInvoke.NTDSApi
Coverage
NuGet Package
NTDll.dll Vanara.PInvoke.NTDll
Coverage
NuGet Package
Ole32.dll, OleAut32 and PropSys.dll Vanara.PInvoke.Ole
Coverage
NuGet Package
AdvApi32.dll, Authz.dll and Secur32.dll Vanara.PInvoke.Security
Coverage
NuGet Package
Shell32.dll Vanara.PInvoke.Shell32
Coverage
NuGet Package
ShlwApi.dll Vanara.PInvoke.ShlwApi
Coverage
NuGet Package
TaskSchd.dll and MSTask.dll Vanara.PInvoke.TaskSchd
Coverage
NuGet Package
User32.dll Vanara.PInvoke.User32
Coverage
NuGet Package
User32.dll that have GDI references Vanara.PInvoke.User32.Gdi
Coverage
NuGet Package
UxTheme.dll Vanara.PInvoke.UxTheme
Coverage
NuGet Package
VirtDisk.dll Vanara.PInvoke.VirtDisk
Coverage
NuGet Package
WinINet.dll Vanara.PInvoke.WinINet
Coverage
NuGet Package
Ws2_32.dll Vanara.PInvoke.Ws2_32
Coverage
NuGet Package

Supporting Assemblies

Assembly NuGet Link Description
Vanara.Core NuGet Package Shared methods, structures and constants for use throughout the Vanara assemblies. Think of it as windows.h with some useful extensions.
Vanara.PInvoke.Shared NuGet Package Shared methods, structures and constants for use throughout the Vanara.PInvoke assemblies.
Vanara.Security NuGet Package Classes for Windows Security that are missing or incomplete in .NET. Includes claims, privileges, impersonation, Active Directory, and UAC.
Vanara.SystemServices NuGet Package Classes for Windows system functions. Includes Background Transfer (BITS), Virtual Disk management, WOW64 interaction, and file, process, path, networking and service controller extensions.
Vanara.Windows.Forms NuGet Package 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, simplified designer framework for Windows.Forms.
Vanara.Windows.Shell NuGet Package Classes for Windows Shell items derived from the Vanara PInvoke libraries. Includes shell items, files, icons, links, shell properties, shell registration and taskbar lists.

Sample Code

There are numerous examples in the UnitTest folder.