Hex Artifact Content

Not logged in

Artifact 23c3e51375a8c6a1e3f9d459c66ce143247d2b77:


0000: 70 72 69 76 61 74 65 20 69 6d 70 6f 72 74 20 63  private import c
0010: 6f 72 65 2e 73 79 73 2e 77 69 6e 64 6f 77 73 2e  ore.sys.windows.
0020: 77 69 6e 64 6f 77 73 3b 0a 0a 2f 2f 20 48 61 63  windows;..// Hac
0030: 6b 21 0a 2f 2f 0a 2f 2f 20 5f 61 63 72 74 75 73  k!.//.// _acrtus
0040: 65 64 5f 64 6c 6c e3 81 8c e5 8b 9d e6 89 8b e3  ed_dll..........
0050: 81 ab e7 b5 82 e4 ba 86 e6 99 82 e3 81 ab e6 a8  ................
0060: 99 e6 ba 96 e5 85 a5 e5 87 ba e5 8a 9b e3 83 8f  ................
0070: e3 83 b3 e3 83 89 e3 83 ab e3 82 92 0a 2f 2f 20  .............// 
0080: e9 96 89 e3 81 98 e3 81 a1 e3 82 83 e3 81 a3 e3  ................
0090: 81 a6 e5 9b b0 e3 82 8b e3 81 ae e3 81 a7 e3 80  ................
00a0: 81 e3 81 9d e3 81 ae e8 be ba e3 82 8a e3 81 a0  ................
00b0: e3 81 91 e3 81 af e9 96 89 e3 81 98 e3 81 aa e3  ................
00c0: 81 84 e3 82 88 e3 81 86 e3 81 aa 0a 2f 2f 20 43  ............// C
00d0: 6c 6f 73 65 48 61 6e 64 6c 65 e3 82 92 e7 aa 81  loseHandle......
00e0: e3 81 a3 e8 be bc e3 82 93 e3 81 a7 e5 9b 9e e9  ................
00f0: 81 bf e3 80 82 e3 81 84 e3 81 84 e3 81 ae e3 81  ................
0100: 8b e3 81 93 e3 82 8c e3 80 82 0a 0a 65 78 74 65  ............exte
0110: 72 6e 28 57 69 6e 64 6f 77 73 29 0a 7b 0a 09 70  rn(Windows).{..p
0120: 72 69 76 61 74 65 20 61 6c 69 61 73 20 42 4f 4f  rivate alias BOO
0130: 4c 20 66 75 6e 63 74 69 6f 6e 28 48 41 4e 44 4c  L function(HANDL
0140: 45 29 20 43 6c 48 6e 54 3b 0a 09 70 72 69 76 61  E) ClHnT;..priva
0150: 74 65 20 43 6c 48 6e 54 20 20 52 65 61 6c 5f 43  te ClHnT  Real_C
0160: 6c 6f 73 65 48 61 6e 64 6c 65 3b 0a 09 70 72 69  loseHandle;..pri
0170: 76 61 74 65 20 48 41 4e 44 4c 45 20 73 74 64 69  vate HANDLE stdi
0180: 6e 3b 0a 09 70 72 69 76 61 74 65 20 48 41 4e 44  n;..private HAND
0190: 4c 45 20 73 74 64 6f 75 74 3b 0a 09 70 72 69 76  LE stdout;..priv
01a0: 61 74 65 20 48 41 4e 44 4c 45 20 73 74 64 65 72  ate HANDLE stder
01b0: 72 3b 0a 0a 09 42 4f 4f 4c 20 43 6c 6f 73 65 48  r;...BOOL CloseH
01c0: 61 6e 64 6c 65 28 20 48 41 4e 44 4c 45 20 68 20  andle( HANDLE h 
01d0: 29 0a 09 7b 0a 09 09 69 66 28 20 68 3d 3d 73 74  )..{...if( h==st
01e0: 64 69 6e 20 20 29 20 72 65 74 75 72 6e 20 54 52  din  ) return TR
01f0: 55 45 3b 0a 09 09 69 66 28 20 68 3d 3d 73 74 64  UE;...if( h==std
0200: 6f 75 74 20 29 20 72 65 74 75 72 6e 20 54 52 55  out ) return TRU
0210: 45 3b 0a 09 09 69 66 28 20 68 3d 3d 73 74 64 65  E;...if( h==stde
0220: 72 72 20 29 20 72 65 74 75 72 6e 20 54 52 55 45  rr ) return TRUE
0230: 3b 0a 09 09 72 65 74 75 72 6e 20 52 65 61 6c 5f  ;...return Real_
0240: 43 6c 6f 73 65 48 61 6e 64 6c 65 28 68 29 3b 0a  CloseHandle(h);.
0250: 09 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 74 68 69  .}.}..static thi
0260: 73 28 29 0a 7b 0a 09 52 65 61 6c 5f 43 6c 6f 73  s().{..Real_Clos
0270: 65 48 61 6e 64 6c 65 20 3d 20 63 61 73 74 28 43  eHandle = cast(C
0280: 6c 48 6e 54 29 0a 09 09 47 65 74 50 72 6f 63 41  lHnT)...GetProcA
0290: 64 64 72 65 73 73 28 20 47 65 74 4d 6f 64 75 6c  ddress( GetModul
02a0: 65 48 61 6e 64 6c 65 41 28 22 6b 65 72 6e 65 6c  eHandleA("kernel
02b0: 33 32 2e 64 6c 6c 22 29 2c 20 22 43 6c 6f 73 65  32.dll"), "Close
02c0: 48 61 6e 64 6c 65 22 20 29 3b 0a 09 73 74 64 69  Handle" );..stdi
02d0: 6e 20 20 3d 20 47 65 74 53 74 64 48 61 6e 64 6c  n  = GetStdHandl
02e0: 65 28 53 54 44 5f 49 4e 50 55 54 5f 48 41 4e 44  e(STD_INPUT_HAND
02f0: 4c 45 20 29 3b 0a 09 73 74 64 6f 75 74 20 3d 20  LE );..stdout = 
0300: 47 65 74 53 74 64 48 61 6e 64 6c 65 28 53 54 44  GetStdHandle(STD
0310: 5f 4f 55 54 50 55 54 5f 48 41 4e 44 4c 45 29 3b  _OUTPUT_HANDLE);
0320: 0a 09 73 74 64 65 72 72 20 3d 20 47 65 74 53 74  ..stderr = GetSt
0330: 64 48 61 6e 64 6c 65 28 53 54 44 5f 45 52 52 4f  dHandle(STD_ERRO
0340: 52 5f 48 41 4e 44 4c 45 20 29 3b 0a 7d 0a        R_HANDLE );.}.