"Fossies" - the Fresh Open Source Software Archive

Member "dmd2/src/phobos/std/internal/windows/advapi32.d" (20 Nov 2020, 2005 Bytes) of package /linux/misc/dmd.2.094.2.linux.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) D source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 // Written in the D programming language.
    2 
    3 /**
    4  * The only purpose of this module is to do the static construction for
    5  * std.windows.registry, to eliminate cyclic construction errors.
    6  *
    7  * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
    8  * Authors:   Kenji Hara
    9  * Source:    $(PHOBOSSRC std/internal/windows/advapi32.d)
   10  */
   11 module std.internal.windows.advapi32;
   12 
   13 version (Windows):
   14 
   15 import core.sys.windows.winbase, core.sys.windows.winnt, core.sys.windows.winreg;
   16 
   17 pragma(lib, "advapi32.lib");
   18 
   19 immutable bool isWow64;
   20 
   21 shared static this()
   22 {
   23     // WOW64 is the x86 emulator that allows 32-bit Windows-based applications to run seamlessly on 64-bit Windows
   24     // IsWow64Process Function - Minimum supported client - Windows Vista, Windows XP with SP2
   25     alias fptr_t = extern(Windows) BOOL function(HANDLE, PBOOL);
   26     auto hKernel = GetModuleHandleA("kernel32");
   27     auto IsWow64Process = cast(fptr_t) GetProcAddress(hKernel, "IsWow64Process");
   28     BOOL bIsWow64;
   29     isWow64 = IsWow64Process && IsWow64Process(GetCurrentProcess(), &bIsWow64) && bIsWow64;
   30 }
   31 
   32 HMODULE hAdvapi32 = null;
   33 extern (Windows)
   34 {
   35     LONG function(in HKEY hkey, in LPCWSTR lpSubKey, in REGSAM samDesired, in DWORD reserved) pRegDeleteKeyExW;
   36 }
   37 
   38 void loadAdvapi32()
   39 {
   40     if (!hAdvapi32)
   41     {
   42         hAdvapi32 = LoadLibraryA("Advapi32.dll");
   43         if (!hAdvapi32)
   44             throw new Exception(`LoadLibraryA("Advapi32.dll")`);
   45 
   46         pRegDeleteKeyExW = cast(typeof(pRegDeleteKeyExW)) GetProcAddress(hAdvapi32 , "RegDeleteKeyExW");
   47         if (!pRegDeleteKeyExW)
   48             throw new Exception(`GetProcAddress(hAdvapi32 , "RegDeleteKeyExW")`);
   49     }
   50 }
   51 
   52 // It will free Advapi32.dll, which may be loaded for RegDeleteKeyEx function
   53 private void freeAdvapi32()
   54 {
   55     if (hAdvapi32)
   56     {
   57         if (!FreeLibrary(hAdvapi32))
   58             throw new Exception(`FreeLibrary("Advapi32.dll")`);
   59         hAdvapi32 = null;
   60 
   61         pRegDeleteKeyExW = null;
   62     }
   63 }
   64 
   65 static ~this()
   66 {
   67     freeAdvapi32();
   68 }