Hex Artifact Content

Not logged in

Artifact 179bfff141b849a3ddb62db7d60012358c5b7b34:


0000: 2f 2f 20 4e 6f 61 68 58 74 2e 63 70 70 0d 0a 2f  // NoahXt.cpp../
0010: 2f 20 2d 2d 20 61 6c 6c 20 6f 66 20 27 4e 6f 61  / -- all of 'Noa
0020: 68 58 74 2e 64 6c 6c 27 20 28 53 68 65 6c 6c 45  hXt.dll' (ShellE
0030: 78 74 65 6e 73 69 6f 6e 20 26 26 20 43 6f 6e 66  xtension && Conf
0040: 69 67 75 72 61 74 69 6f 6e 20 6f 66 20 4e 6f 61  iguration of Noa
0050: 68 29 0d 0a 0d 0a 23 75 6e 64 65 66 20 20 20 57  h)....#undef   W
0060: 49 4e 56 45 52 0d 0a 23 64 65 66 69 6e 65 20 20  INVER..#define  
0070: 57 49 4e 56 45 52 20 20 20 30 78 30 34 30 30 0d  WINVER   0x0400.
0080: 0a 23 69 66 6e 64 65 66 20 20 53 54 52 49 43 54  .#ifndef  STRICT
0090: 0d 0a 23 64 65 66 69 6e 65 20 20 53 54 52 49 43  ..#define  STRIC
00a0: 54 0d 0a 23 65 6e 64 69 66 0d 0a 23 64 65 66 69  T..#endif..#defi
00b0: 6e 65 20 20 49 4e 43 5f 4f 4c 45 32 0d 0a 23 75  ne  INC_OLE2..#u
00c0: 6e 64 65 66 20 20 5f 57 49 4e 33 32 5f 49 45 0d  ndef  _WIN32_IE.
00d0: 0a 23 64 65 66 69 6e 65 20 5f 57 49 4e 33 32 5f  .#define _WIN32_
00e0: 49 45 20 30 78 30 32 30 30 0d 0a 0d 0a 23 69 6e  IE 0x0200....#in
00f0: 63 6c 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68  clude <windows.h
0100: 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e  >..#include <win
0110: 64 6f 77 73 78 2e 68 3e 0d 0a 23 69 6e 63 6c 75  dowsx.h>..#inclu
0120: 64 65 20 3c 73 68 6c 6f 62 6a 2e 68 3e 0d 0a 23  de <shlobj.h>..#
0130: 69 6e 63 6c 75 64 65 20 3c 6c 6d 61 63 63 65 73  include <lmacces
0140: 73 2e 68 3e 0d 0a 0d 0a 2f 2f 20 83 4a 83 8c 83  s.h>....// .J...
0150: 93 83 67 83 66 83 42 83 8c 83 4e 83 67 83 8a 82  ..g.f.B...N.g...
0160: f0 88 c0 91 53 82 c8 82 c6 82 b1 82 eb 82 c9 88  ....S...........
0170: da 82 b5 82 c4 4c 6f 61 64 4c 69 62 72 61 72 79  .....LoadLibrary
0180: 0d 0a 73 74 61 74 69 63 20 48 4d 4f 44 55 4c 45  ..static HMODULE
0190: 20 73 61 66 65 70 61 74 68 4c 6f 61 64 4c 69 62   safepathLoadLib
01a0: 72 61 72 79 28 4c 50 43 54 53 54 52 20 6c 70 46  rary(LPCTSTR lpF
01b0: 69 6c 65 4e 61 6d 65 29 0d 0a 7b 0d 0a 09 63 68  ileName)..{...ch
01c0: 61 72 20 6f 72 69 67 69 6e 61 6c 5f 63 75 72 5b  ar original_cur[
01d0: 4d 41 58 5f 50 41 54 48 5d 2c 20 73 79 73 5b 4d  MAX_PATH], sys[M
01e0: 41 58 5f 50 41 54 48 5d 3b 0d 0a 09 3a 3a 47 65  AX_PATH];...::Ge
01f0: 74 43 75 72 72 65 6e 74 44 69 72 65 63 74 6f 72  tCurrentDirector
0200: 79 28 4d 41 58 5f 50 41 54 48 2c 20 6f 72 69 67  y(MAX_PATH, orig
0210: 69 6e 61 6c 5f 63 75 72 29 3b 0d 0a 09 3a 3a 47  inal_cur);...::G
0220: 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72  etSystemDirector
0230: 79 28 73 79 73 2c 20 4d 41 58 5f 50 41 54 48 29  y(sys, MAX_PATH)
0240: 3b 0d 0a 09 3a 3a 53 65 74 43 75 72 72 65 6e 74  ;...::SetCurrent
0250: 44 69 72 65 63 74 6f 72 79 28 73 79 73 29 3b 0d  Directory(sys);.
0260: 0a 09 48 4d 4f 44 55 4c 45 20 68 61 6e 20 3d 20  ..HMODULE han = 
0270: 3a 3a 4c 6f 61 64 4c 69 62 72 61 72 79 28 6c 70  ::LoadLibrary(lp
0280: 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 09 3a 3a 53  FileName);...::S
0290: 65 74 43 75 72 72 65 6e 74 44 69 72 65 63 74 6f  etCurrentDirecto
02a0: 72 79 28 6f 72 69 67 69 6e 61 6c 5f 63 75 72 29  ry(original_cur)
02b0: 3b 0d 0a 09 72 65 74 75 72 6e 20 68 61 6e 3b 0d  ;...return han;.
02c0: 0a 7d 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  .}....//--------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d  ---------------.
0300: 0a 2f 2f 2d 2d 20 4e 6f 61 68 20 43 6f 6e 66 69  .//-- Noah Confi
0310: 67 20 41 50 49 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  g API ----------
0320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 2d 2d  ----------..//--
0340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0370: 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 0d 0a 62 6f 6f  -----........boo
0380: 6c 20 57 49 4e 41 50 49 20 49 6e 69 74 28 29 3b  l WINAPI Init();
0390: 0d 0a 76 6f 69 64 20 57 49 4e 41 50 49 20 4c 6f  ..void WINAPI Lo
03a0: 61 64 53 45 28 20 62 6f 6f 6c 2a 20 61 2c 20 62  adSE( bool* a, b
03b0: 6f 6f 6c 2a 20 78 20 29 3b 0d 0a 76 6f 69 64 20  ool* x );..void 
03c0: 57 49 4e 41 50 49 20 53 61 76 65 53 45 28 20 62  WINAPI SaveSE( b
03d0: 6f 6f 6c 20 61 2c 20 62 6f 6f 6c 20 78 20 29 3b  ool a, bool x );
03e0: 0d 0a 76 6f 69 64 20 57 49 4e 41 50 49 20 4c 6f  ..void WINAPI Lo
03f0: 61 64 41 53 28 20 62 6f 6f 6c 20 61 73 73 6f 5b  adAS( bool asso[
0400: 5d 20 29 3b 0d 0a 76 6f 69 64 20 57 49 4e 41 50  ] );..void WINAP
0410: 49 20 53 61 76 65 41 53 28 20 62 6f 6f 6c 20 61  I SaveAS( bool a
0420: 73 73 6f 5b 5d 20 29 3b 0d 0a 76 6f 69 64 20 57  sso[] );..void W
0430: 49 4e 41 50 49 20 4c 6f 61 64 41 53 45 78 28 20  INAPI LoadASEx( 
0440: 63 6f 6e 73 74 20 63 68 61 72 2a 20 65 78 74 2c  const char* ext,
0450: 20 62 6f 6f 6c 2a 20 78 20 29 3b 0d 0a 76 6f 69   bool* x );..voi
0460: 64 20 57 49 4e 41 50 49 20 53 61 76 65 41 53 45  d WINAPI SaveASE
0470: 78 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 65  x( const char* e
0480: 78 74 2c 20 62 6f 6f 6c 20 78 20 29 3b 0d 0a 0d  xt, bool x );...
0490: 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d  .....//---------
04a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a  --------------..
04d0: 2f 2f 2d 2d 20 83 4f 83 8d 81 5b 83 6f 83 8b 95  //-- .O...[.o...
04e0: cf 90 94 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ... ------------
04f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 2d 2d 2d  ---------..//---
0510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0540: 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 0d 0a 63 68 61 72  ----........char
0550: 20 67 5f 73 7a 4e 6f 61 68 5b 4d 41 58 5f 50 41   g_szNoah[MAX_PA
0560: 54 48 5d 3b 20 2f 2f 20 57 68 65 72 65 20 69 73  TH]; // Where is
0570: 20 4e 6f 61 68 20 3f 0d 0a 63 68 61 72 20 20 67   Noah ?..char  g
0580: 5f 73 7a 44 4c 4c 5b 4d 41 58 5f 50 41 54 48 5d  _szDLL[MAX_PATH]
0590: 3b 20 2f 2f 20 57 68 61 74 27 73 20 6d 79 20 6e  ; // What's my n
05a0: 61 6d 65 20 3f 0d 0a 62 6f 6f 6c 20 20 20 20 20  ame ?..bool     
05b0: 20 20 20 20 20 20 20 20 67 5f 62 4a 70 6e 3b 20          g_bJpn; 
05c0: 2f 2f 20 61 6d 20 49 20 69 6e 20 4a 61 70 61 6e  // am I in Japan
05d0: 65 73 65 20 4d 6f 64 65 20 3f 0d 0a 62 6f 6f 6c  ese Mode ?..bool
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 5f 69               g_i
05f0: 73 4e 54 3b 20 2f 2f 20 69 73 20 57 69 6e 64 6f  sNT; // is Windo
0600: 77 73 20 4e 54 2f 32 30 30 30 20 3f 0d 0a 69 6e  ws NT/2000 ?..in
0610: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67  t              g
0620: 5f 63 52 65 66 3b 20 2f 2f 20 72 65 66 65 72 65  _cRef; // refere
0630: 6e 63 65 20 63 6f 75 6e 74 65 72 0d 0a 62 6f 6f  nce counter..boo
0640: 6c 20 20 20 20 20 20 20 20 20 67 5f 62 43 68 61  l         g_bCha
0650: 6e 67 65 64 3b 20 2f 2f 20 61 73 73 6f 63 69 61  nged; // associa
0660: 74 69 6f 6e 20 63 68 61 6e 67 65 64 20 3f 0d 0a  tion changed ?..
0670: 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  ......//--------
0680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d  ---------------.
06b0: 0a 2f 2f 2d 2d 20 47 55 49 44 20 7b 39 35 33 41  .//-- GUID {953A
06c0: 46 41 45 39 2d 43 32 41 39 2d 34 36 37 34 2d 39  FAE9-C2A9-4674-9
06d0: 38 31 31 2d 44 37 45 32 38 31 42 30 30 31 45 31  811-D7E281B001E1
06e0: 7d 20 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 2d 2d  } --------..//--
06f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0720: 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 0d 0a 73 74 61  -----........sta
0730: 74 69 63 20 63 6f 6e 73 74 20 47 55 49 44 20 43  tic const GUID C
0740: 4c 53 49 44 5f 4e 6f 61 68 58 74 20 3d 0d 0a 09  LSID_NoahXt =...
0750: 7b 20 30 78 39 35 33 61 66 61 65 39 2c 20 30 78  { 0x953afae9, 0x
0760: 63 32 61 39 2c 20 30 78 34 36 37 34 2c 20 7b 20  c2a9, 0x4674, { 
0770: 30 78 39 38 2c 20 30 78 31 31 2c 20 30 78 64 37  0x98, 0x11, 0xd7
0780: 2c 20 30 78 65 32 2c 20 30 78 38 31 2c 20 30 78  , 0xe2, 0x81, 0x
0790: 62 30 2c 20 30 78 31 2c 20 30 78 65 31 20 7d 20  b0, 0x1, 0xe1 } 
07a0: 7d 3b 0d 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  };..static const
07b0: 20 63 68 61 72 2a 20 50 72 6f 67 49 44 5f 4e 6f   char* ProgID_No
07c0: 61 68 58 74 20 3d 20 22 4e 6f 61 68 58 74 22 3b  ahXt = "NoahXt";
07d0: 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d  ........//------
07e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
07f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0810: 2d 2d 0d 0a 2f 2f 2d 2d 20 83 56 83 46 83 8b 83  --..//-- .V.F...
0820: 47 83 4e 83 58 83 65 83 93 83 56 83 87 83 93 81  G.N.X.e...V.....
0830: 45 96 7b 91 cc 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  E.{.. ----------
0840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0850: 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..//------------
0860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a  ------------....
0890: 0d 0a 0d 0a 63 6c 61 73 73 20 6e 6f 61 68 58 74  ....class noahXt
08a0: 20 3a 20 70 75 62 6c 69 63 20 49 43 6f 6e 74 65   : public IConte
08b0: 78 74 4d 65 6e 75 2c 20 49 53 68 65 6c 6c 45 78  xtMenu, IShellEx
08c0: 74 49 6e 69 74 0d 0a 7b 0d 0a 70 75 62 6c 69 63  tInit..{..public
08d0: 3a 0d 0a 09 6e 6f 61 68 58 74 28 29 09 09 09 09  :...noahXt()....
08e0: 09 09 7b 20 6d 5f 73 7a 44 69 72 5b 30 5d 3d 30  ..{ m_szDir[0]=0
08f0: 3b 20 6d 5f 70 44 61 74 61 4f 62 6a 3d 4e 55 4c  ; m_pDataObj=NUL
0900: 4c 3b 20 6d 5f 63 52 65 66 3d 30 4c 3b 20 67 5f  L; m_cRef=0L; g_
0910: 63 52 65 66 2b 2b 3b 20 7d 0d 0a 09 7e 6e 6f 61  cRef++; }...~noa
0920: 68 58 74 28 29 09 09 09 09 09 09 7b 20 69 66 28  hXt()......{ if(
0930: 20 6d 5f 70 44 61 74 61 4f 62 6a 20 29 20 6d 5f   m_pDataObj ) m_
0940: 70 44 61 74 61 4f 62 6a 2d 3e 52 65 6c 65 61 73  pDataObj->Releas
0950: 65 28 29 3b 20 67 5f 63 52 65 66 2d 2d 3b 20 7d  e(); g_cRef--; }
0960: 0d 0a 09 53 54 44 4d 45 54 48 4f 44 49 4d 50 5f  ...STDMETHODIMP_
0970: 28 55 4c 4f 4e 47 29 20 41 64 64 52 65 66 28 29  (ULONG) AddRef()
0980: 09 7b 20 72 65 74 75 72 6e 20 28 2b 2b 6d 5f 63  .{ return (++m_c
0990: 52 65 66 29 3b 20 7d 0d 0a 09 53 54 44 4d 45 54  Ref); }...STDMET
09a0: 48 4f 44 49 4d 50 5f 28 55 4c 4f 4e 47 29 20 52  HODIMP_(ULONG) R
09b0: 65 6c 65 61 73 65 28 29 09 7b 20 69 66 28 20 2d  elease().{ if( -
09c0: 2d 6d 5f 63 52 65 66 20 29 72 65 74 75 72 6e 20  -m_cRef )return 
09d0: 6d 5f 63 52 65 66 3b 20 64 65 6c 65 74 65 20 74  m_cRef; delete t
09e0: 68 69 73 3b 20 72 65 74 75 72 6e 20 30 4c 3b 20  his; return 0L; 
09f0: 7d 0d 0a 09 53 54 44 4d 45 54 48 4f 44 49 4d 50  }...STDMETHODIMP
0a00: 20 51 75 65 72 79 49 6e 74 65 72 66 61 63 65 28   QueryInterface(
0a10: 20 52 45 46 49 49 44 20 72 69 69 64 2c 20 76 6f   REFIID riid, vo
0a20: 69 64 2a 2a 20 70 70 76 20 29 0d 0a 09 09 7b 0d  id** ppv )....{.
0a30: 0a 09 09 09 2a 70 70 76 20 3d 20 4e 55 4c 4c 3b  ....*ppv = NULL;
0a40: 0d 0a 09 09 09 41 64 64 52 65 66 28 29 3b 0d 0a  .....AddRef();..
0a50: 09 09 09 69 66 28 20 49 73 45 71 75 61 6c 49 49  ...if( IsEqualII
0a60: 44 28 20 72 69 69 64 2c 20 49 49 44 5f 49 55 6e  D( riid, IID_IUn
0a70: 6b 6e 6f 77 6e 20 29 20 7c 7c 20 49 73 45 71 75  known ) || IsEqu
0a80: 61 6c 49 49 44 28 20 72 69 69 64 2c 20 49 49 44  alIID( riid, IID
0a90: 5f 49 53 68 65 6c 6c 45 78 74 49 6e 69 74 20 29  _IShellExtInit )
0aa0: 20 29 0d 0a 09 09 09 09 2a 70 70 76 20 3d 20 28   )......*ppv = (
0ab0: 49 53 68 65 6c 6c 45 78 74 49 6e 69 74 2a 29 74  IShellExtInit*)t
0ac0: 68 69 73 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66  his;.....else if
0ad0: 28 20 49 73 45 71 75 61 6c 49 49 44 28 20 72 69  ( IsEqualIID( ri
0ae0: 69 64 2c 20 49 49 44 5f 49 43 6f 6e 74 65 78 74  id, IID_IContext
0af0: 4d 65 6e 75 20 29 20 29 0d 0a 09 09 09 09 2a 70  Menu ) )......*p
0b00: 70 76 20 3d 20 28 49 43 6f 6e 74 65 78 74 4d 65  pv = (IContextMe
0b10: 6e 75 2a 29 74 68 69 73 3b 0d 0a 09 09 09 65 6c  nu*)this;.....el
0b20: 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 52 65  se.....{......Re
0b30: 6c 65 61 73 65 28 29 3b 0d 0a 09 09 09 09 72 65  lease();......re
0b40: 74 75 72 6e 20 45 5f 4e 4f 49 4e 54 45 52 46 41  turn E_NOINTERFA
0b50: 43 45 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 72 65  CE;.....}.....re
0b60: 74 75 72 6e 20 4e 4f 45 52 52 4f 52 3b 0d 0a 09  turn NOERROR;...
0b70: 09 7d 0d 0a 09 53 54 44 4d 45 54 48 4f 44 49 4d  .}...STDMETHODIM
0b80: 50 20 49 6e 69 74 69 61 6c 69 7a 65 28 20 63 6f  P Initialize( co
0b90: 6e 73 74 20 49 54 45 4d 49 44 4c 49 53 54 2a 20  nst ITEMIDLIST* 
0ba0: 70 46 2c 20 49 44 61 74 61 4f 62 6a 65 63 74 2a  pF, IDataObject*
0bb0: 20 70 44 2c 20 48 4b 45 59 20 29 0d 0a 09 09 7b   pD, HKEY )....{
0bc0: 0d 0a 09 09 09 3a 3a 53 48 47 65 74 50 61 74 68  .....::SHGetPath
0bd0: 46 72 6f 6d 49 44 4c 69 73 74 28 20 70 46 2c 20  FromIDList( pF, 
0be0: 6d 5f 73 7a 44 69 72 20 29 3b 0d 0a 09 09 09 69  m_szDir );.....i
0bf0: 66 28 20 6d 5f 70 44 61 74 61 4f 62 6a 20 29 6d  f( m_pDataObj )m
0c00: 5f 70 44 61 74 61 4f 62 6a 2d 3e 52 65 6c 65 61  _pDataObj->Relea
0c10: 73 65 28 29 3b 0d 0a 09 09 09 69 66 28 20 70 44  se();.....if( pD
0c20: 20 29 09 28 6d 5f 70 44 61 74 61 4f 62 6a 3d 70   ).(m_pDataObj=p
0c30: 44 29 2d 3e 41 64 64 52 65 66 28 29 3b 0d 0a 09  D)->AddRef();...
0c40: 09 09 72 65 74 75 72 6e 20 4e 4f 45 52 52 4f 52  ..return NOERROR
0c50: 3b 0d 0a 09 09 7d 0d 0a 0d 0a 23 64 65 66 69 6e  ;....}....#defin
0c60: 65 20 43 4d 50 52 5f 43 4d 44 5f 45 20 28 22 43  e CMPR_CMD_E ("C
0c70: 6f 6d 26 70 72 65 73 73 20 48 65 72 65 22 29 0d  om&press Here").
0c80: 0a 23 64 65 66 69 6e 65 20 45 58 54 52 5f 43 4d  .#define EXTR_CM
0c90: 44 5f 45 20 28 22 45 26 78 74 72 61 63 74 20 48  D_E ("E&xtract H
0ca0: 65 72 65 22 29 0d 0a 23 64 65 66 69 6e 65 20 43  ere")..#define C
0cb0: 4d 50 52 5f 43 4d 44 20 20 20 28 67 5f 62 4a 70  MPR_CMD   (g_bJp
0cc0: 6e 20 3f 20 22 82 b1 82 b1 82 c9 88 b3 8f 6b 28  n ? ".........k(
0cd0: 26 50 29 22 20 3a 20 43 4d 50 52 5f 43 4d 44 5f  &P)" : CMPR_CMD_
0ce0: 45 29 0d 0a 23 64 65 66 69 6e 65 20 45 58 54 52  E)..#define EXTR
0cf0: 5f 43 4d 44 20 20 20 28 67 5f 62 4a 70 6e 20 3f  _CMD   (g_bJpn ?
0d00: 20 22 82 b1 82 b1 82 c9 89 f0 93 80 28 26 58 29   "..........(&X)
0d10: 22 20 3a 20 45 58 54 52 5f 43 4d 44 5f 45 29 0d  " : EXTR_CMD_E).
0d20: 0a 23 64 65 66 69 6e 65 20 43 4d 50 52 5f 48 4c  .#define CMPR_HL
0d30: 50 20 20 20 28 67 5f 62 4a 70 6e 20 3f 20 22 83  P   (g_bJpn ? ".
0d40: 74 83 40 83 43 83 8b 82 f0 4e 6f 61 68 82 c5 88  t.@.C....Noah...
0d50: b3 8f 6b 82 b5 82 dc 82 b7 81 42 22 20 3a 20 22  ..k.......B" : "
0d60: 43 6f 6d 70 72 65 73 73 20 54 68 65 73 65 20 46  Compress These F
0d70: 69 6c 65 73 20 42 79 20 4e 6f 61 68 22 29 0d 0a  iles By Noah")..
0d80: 23 64 65 66 69 6e 65 20 45 58 54 52 5f 48 4c 50  #define EXTR_HLP
0d90: 20 20 20 28 67 5f 62 4a 70 6e 20 3f 20 22 83 74     (g_bJpn ? ".t
0da0: 83 40 83 43 83 8b 82 f0 4e 6f 61 68 82 c5 93 57  .@.C....Noah...W
0db0: 8a 4a 22 20 3a 20 22 45 78 74 72 61 63 74 20 46  .J" : "Extract F
0dc0: 69 6c 65 73 20 42 79 20 4e 6f 61 68 22 29 0d 0a  iles By Noah")..
0dd0: 0d 0a 09 2f 2f 20 89 45 83 4e 83 8a 83 62 83 4e  ...// .E.N...b.N
0de0: 83 81 83 6a 83 85 81 5b 82 d6 92 c7 89 c1 0d 0a  ...j...[........
0df0: 09 53 54 44 4d 45 54 48 4f 44 49 4d 50 20 51 75  .STDMETHODIMP Qu
0e00: 65 72 79 43 6f 6e 74 65 78 74 4d 65 6e 75 28 20  eryContextMenu( 
0e10: 48 4d 45 4e 55 20 68 2c 20 55 49 4e 54 20 69 2c  HMENU h, UINT i,
0e20: 20 55 49 4e 54 20 69 64 2c 20 55 49 4e 54 20 69   UINT id, UINT i
0e30: 64 4c 61 73 74 2c 20 55 49 4e 54 20 66 6c 61 67  dLast, UINT flag
0e40: 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 20   )....{.....if( 
0e50: 28 66 6c 61 67 26 30 78 30 30 30 46 29 21 3d 43  (flag&0x000F)!=C
0e60: 4d 46 5f 4e 4f 52 4d 41 4c 20 26 26 20 21 28 66  MF_NORMAL && !(f
0e70: 6c 61 67 26 43 4d 46 5f 56 45 52 42 53 4f 4e 4c  lag&CMF_VERBSONL
0e80: 59 29 20 26 26 20 21 28 66 6c 61 67 26 43 4d 46  Y) && !(flag&CMF
0e90: 5f 45 58 50 4c 4f 52 45 29 20 29 0d 0a 09 09 09  _EXPLORE) ).....
0ea0: 09 72 65 74 75 72 6e 20 4e 4f 45 52 52 4f 52 3b  .return NOERROR;
0eb0: 0d 0a 0d 0a 09 09 09 2f 2f 20 83 8c 83 57 83 58  .......// ...W.X
0ec0: 83 67 83 8a 82 a9 82 e7 90 dd 92 e8 93 c7 82 dd  .g..............
0ed0: 8d 9e 82 dd 0d 0a 09 09 09 2f 2f 20 82 c5 82 ab  .........// ....
0ee0: 82 ea 82 ce 81 41 82 b1 82 b1 82 c5 6d 5f 62 45  .....A......m_bE
0ef0: 58 54 82 c9 8a d6 82 b5 82 c4 82 cd 8a 67 92 a3  XT...........g..
0f00: 8e 71 94 bb 92 e8 82 f0 8d 73 82 a2 82 bd 82 a2  .q.......s......
0f10: 82 c6 82 b1 82 eb 81 63 28 5e 5e 3b 0d 0a 09 09  .......c(^^;....
0f20: 09 4c 6f 61 64 53 45 28 20 26 6d 5f 62 43 4d 50  .LoadSE( &m_bCMP
0f30: 2c 20 26 6d 5f 62 45 58 54 20 29 3b 0d 0a 0d 0a  , &m_bEXT );....
0f40: 09 09 09 69 66 28 20 6d 5f 62 43 4d 50 20 29 20  ...if( m_bCMP ) 
0f50: 3a 3a 49 6e 73 65 72 74 4d 65 6e 75 28 20 68 2c  ::InsertMenu( h,
0f60: 20 69 2b 2b 2c 20 4d 46 5f 53 54 52 49 4e 47 7c   i++, MF_STRING|
0f70: 4d 46 5f 42 59 50 4f 53 49 54 49 4f 4e 2c 20 69  MF_BYPOSITION, i
0f80: 64 2b 2b 2c 20 43 4d 50 52 5f 43 4d 44 20 29 3b  d++, CMPR_CMD );
0f90: 0d 0a 09 09 09 69 66 28 20 6d 5f 62 45 58 54 20  .....if( m_bEXT 
0fa0: 29 20 3a 3a 49 6e 73 65 72 74 4d 65 6e 75 28 20  ) ::InsertMenu( 
0fb0: 68 2c 20 69 2b 2b 2c 20 4d 46 5f 53 54 52 49 4e  h, i++, MF_STRIN
0fc0: 47 7c 4d 46 5f 42 59 50 4f 53 49 54 49 4f 4e 2c  G|MF_BYPOSITION,
0fd0: 20 69 64 2b 2b 2c 20 45 58 54 52 5f 43 4d 44 20   id++, EXTR_CMD 
0fe0: 29 3b 0d 0a 09 09 09 72 65 74 75 72 6e 20 4d 41  );.....return MA
0ff0: 4b 45 5f 48 52 45 53 55 4c 54 28 20 53 45 56 45  KE_HRESULT( SEVE
1000: 52 49 54 59 5f 53 55 43 43 45 53 53 2c 20 30 2c  RITY_SUCCESS, 0,
1010: 20 69 64 20 29 3b 0d 0a 09 09 7d 0d 0a 09 2f 2f   id );....}...//
1020: 20 83 52 83 7d 83 93 83 68 8e c0 8d 73 0d 0a 09   .R.}...h...s...
1030: 53 54 44 4d 45 54 48 4f 44 49 4d 50 20 49 6e 76  STDMETHODIMP Inv
1040: 6f 6b 65 43 6f 6d 6d 61 6e 64 28 20 4c 50 43 4d  okeCommand( LPCM
1050: 49 4e 56 4f 4b 45 43 4f 4d 4d 41 4e 44 49 4e 46  INVOKECOMMANDINF
1060: 4f 20 6c 70 63 6d 69 20 29 0d 0a 09 09 7b 0d 0a  O lpcmi )....{..
1070: 09 09 09 69 66 28 20 30 3d 3d 48 49 57 4f 52 44  ...if( 0==HIWORD
1080: 28 6c 70 63 6d 69 2d 3e 6c 70 56 65 72 62 29 20  (lpcmi->lpVerb) 
1090: 29 0d 0a 09 09 09 09 73 77 69 74 63 68 28 20 66  )......switch( f
10a0: 69 6c 74 65 72 5f 63 6d 64 28 20 4c 4f 57 4f 52  ilter_cmd( LOWOR
10b0: 44 28 6c 70 63 6d 69 2d 3e 6c 70 56 65 72 62 29  D(lpcmi->lpVerb)
10c0: 20 29 20 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09   ) )......{.....
10d0: 09 63 61 73 65 20 30 3a 20 72 65 74 75 72 6e 20  .case 0: return 
10e0: 6f 70 65 72 61 74 69 6f 6e 28 20 22 2d 61 22 20  operation( "-a" 
10f0: 29 3b 0d 0a 09 09 09 09 63 61 73 65 20 31 3a 20  );......case 1: 
1100: 72 65 74 75 72 6e 20 6f 70 65 72 61 74 69 6f 6e  return operation
1110: 28 20 22 2d 78 22 20 29 3b 0d 0a 09 09 09 09 7d  ( "-x" );......}
1120: 0d 0a 09 09 09 72 65 74 75 72 6e 20 45 5f 49 4e  .....return E_IN
1130: 56 41 4c 49 44 41 52 47 3b 0d 0a 09 09 7d 0d 0a  VALIDARG;....}..
1140: 09 2f 2f 20 83 77 83 8b 83 76 95 b6 8e 9a 97 f1  .// .w...v......
1150: 82 c8 82 c7 0d 0a 09 53 54 44 4d 45 54 48 4f 44  .......STDMETHOD
1160: 49 4d 50 20 47 65 74 43 6f 6d 6d 61 6e 64 53 74  IMP GetCommandSt
1170: 72 69 6e 67 28 20 55 49 4e 54 20 63 6d 64 2c 20  ring( UINT cmd, 
1180: 55 49 4e 54 20 66 6c 61 67 2c 20 55 49 4e 54 2a  UINT flag, UINT*
1190: 2c 20 4c 50 53 54 52 20 70 73 7a 4e 61 6d 65 2c  , LPSTR pszName,
11a0: 20 55 49 4e 54 20 63 63 68 4d 61 78 20 29 0d 0a   UINT cchMax )..
11b0: 09 09 7b 0d 0a 09 09 09 63 6d 64 20 3d 20 66 69  ..{.....cmd = fi
11c0: 6c 74 65 72 5f 63 6d 64 28 20 63 6d 64 20 29 3b  lter_cmd( cmd );
11d0: 0d 0a 09 09 09 69 66 28 20 63 6d 64 3d 3d 32 20  .....if( cmd==2 
11e0: 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 45 5f  )......return E_
11f0: 46 41 49 4c 3b 0d 0a 09 09 09 73 77 69 74 63 68  FAIL;.....switch
1200: 28 20 66 6c 61 67 20 29 0d 0a 09 09 09 7b 0d 0a  ( flag ).....{..
1210: 09 09 09 63 61 73 65 20 47 43 53 5f 48 45 4c 50  ...case GCS_HELP
1220: 54 45 58 54 3a 09 3a 3a 6c 73 74 72 63 70 79 6e  TEXT:.::lstrcpyn
1230: 28 20 70 73 7a 4e 61 6d 65 2c 20 63 6d 64 3d 3d  ( pszName, cmd==
1240: 30 20 3f 20 43 4d 50 52 5f 48 4c 50 20 3a 20 45  0 ? CMPR_HLP : E
1250: 58 54 52 5f 48 4c 50 2c 20 63 63 68 4d 61 78 20  XTR_HLP, cchMax 
1260: 29 3b 20 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61  ); break;.....ca
1270: 73 65 20 47 43 53 5f 56 45 52 42 3a 09 09 3a 3a  se GCS_VERB:..::
1280: 6c 73 74 72 63 70 79 6e 28 20 70 73 7a 4e 61 6d  lstrcpyn( pszNam
1290: 65 2c 20 63 6d 64 3d 3d 30 20 3f 20 43 4d 50 52  e, cmd==0 ? CMPR
12a0: 5f 43 4d 44 5f 45 20 3a 20 45 58 54 52 5f 43 4d  _CMD_E : EXTR_CM
12b0: 44 5f 45 2c 20 63 63 68 4d 61 78 20 29 3b 20 62  D_E, cchMax ); b
12c0: 72 65 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09  reak;.....}.....
12d0: 72 65 74 75 72 6e 20 4e 4f 45 52 52 4f 52 3b 0d  return NOERROR;.
12e0: 0a 09 09 7d 0d 0a 70 72 69 76 61 74 65 3a 0d 0a  ...}..private:..
12f0: 09 2f 2f 20 83 52 83 7d 83 93 83 68 49 44 82 f0  .// .R.}...hID..
1300: 20 63 6f 6d 70 72 65 73 73 3d 30 2c 20 6d 65 6c   compress=0, mel
1310: 74 3d 31 2c 20 65 6c 73 65 3d 32 20 82 c9 83 74  t=1, else=2 ...t
1320: 83 42 83 8b 83 5e 83 8a 83 93 83 4f 0d 0a 09 55  .B...^.....O...U
1330: 49 4e 54 20 66 69 6c 74 65 72 5f 63 6d 64 28 20  INT filter_cmd( 
1340: 55 49 4e 54 20 69 20 29 0d 0a 09 09 7b 0d 0a 09  UINT i )....{...
1350: 09 09 69 66 28 20 6d 5f 62 43 4d 50 20 29 69 66  ..if( m_bCMP )if
1360: 28 20 6d 5f 62 45 58 54 20 29 72 65 74 75 72 6e  ( m_bEXT )return
1370: 20 28 69 3c 3d 31 20 3f 20 69 20 3a 20 32 29 3b   (i<=1 ? i : 2);
1380: 0d 0a 09 09 09 09 09 09 65 6c 73 65 09 09 72 65  ........else..re
1390: 74 75 72 6e 20 28 69 3d 3d 30 20 3f 20 30 20 3a  turn (i==0 ? 0 :
13a0: 20 32 29 3b 0d 0a 09 09 09 65 6c 73 65 09 09 69   2);.....else..i
13b0: 66 28 20 6d 5f 62 45 58 54 20 29 72 65 74 75 72  f( m_bEXT )retur
13c0: 6e 20 28 69 3d 3d 30 20 3f 20 31 20 3a 20 32 29  n (i==0 ? 1 : 2)
13d0: 3b 0d 0a 09 09 09 09 09 09 65 6c 73 65 09 09 72  ;........else..r
13e0: 65 74 75 72 6e 20 32 3b 0d 0a 09 09 7d 0d 0a 09  eturn 2;....}...
13f0: 2f 2f 20 4e 6f 61 68 2e 65 78 65 82 d6 93 6e 82  // Noah.exe...n.
1400: b7 8f 88 97 9d 20 22 43 6f 6d 70 72 65 73 73 20  ..... "Compress 
1410: 48 65 72 65 22 20 6f 72 20 22 45 78 74 72 61 63  Here" or "Extrac
1420: 74 20 48 65 72 65 22 0d 0a 09 53 54 44 4d 45 54  t Here"...STDMET
1430: 48 4f 44 49 4d 50 20 6f 70 65 72 61 74 69 6f 6e  HODIMP operation
1440: 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 6f 70  ( const char* op
1450: 74 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 53 54 47  t )....{.....STG
1460: 4d 45 44 49 55 4d 20 6d 64 3b 0d 0a 09 09 09 46  MEDIUM md;.....F
1470: 4f 52 4d 41 54 45 54 43 20 66 65 20 3d 20 7b 43  ORMATETC fe = {C
1480: 46 5f 48 44 52 4f 50 2c 20 4e 55 4c 4c 2c 20 44  F_HDROP, NULL, D
1490: 56 41 53 50 45 43 54 5f 43 4f 4e 54 45 4e 54 2c  VASPECT_CONTENT,
14a0: 20 2d 31 2c 20 54 59 4d 45 44 5f 48 47 4c 4f 42   -1, TYMED_HGLOB
14b0: 41 4c 7d 3b 0d 0a 09 09 09 69 66 28 20 53 55 43  AL};.....if( SUC
14c0: 43 45 45 44 45 44 28 20 6d 5f 70 44 61 74 61 4f  CEEDED( m_pDataO
14d0: 62 6a 2d 3e 47 65 74 44 61 74 61 28 20 26 66 65  bj->GetData( &fe
14e0: 2c 20 26 6d 64 20 29 20 29 20 29 0d 0a 09 09 09  , &md ) ) ).....
14f0: 7b 0d 0a 09 09 09 09 63 6f 6e 73 74 20 48 44 52  {......const HDR
1500: 4f 50 26 20 68 44 72 6f 70 20 3d 20 28 48 44 52  OP& hDrop = (HDR
1510: 4f 50 29 6d 64 2e 68 47 6c 6f 62 61 6c 3b 0d 0a  OP)md.hGlobal;..
1520: 09 09 09 09 63 6f 6e 73 74 20 69 6e 74 20 6e 75  ....const int nu
1530: 6d 20 3d 20 3a 3a 44 72 61 67 51 75 65 72 79 46  m = ::DragQueryF
1540: 69 6c 65 28 20 68 44 72 6f 70 2c 20 30 78 66 66  ile( hDrop, 0xff
1550: 66 66 66 66 66 66 2c 20 4e 55 4c 4c 2c 20 30 20  ffffff, NULL, 0 
1560: 29 3b 0d 0a 09 09 09 09 69 66 28 20 6e 75 6d 20  );......if( num 
1570: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 2f  )......{......./
1580: 2f 20 6d 61 69 6e 20 63 6f 6d 6d 61 6e 64 0d 0a  / main command..
1590: 09 09 09 09 09 63 68 61 72 2a 20 63 6d 64 20 3d  .....char* cmd =
15a0: 20 6e 65 77 20 63 68 61 72 5b 31 30 20 2b 20 4d   new char[10 + M
15b0: 41 58 5f 50 41 54 48 20 2a 20 28 6e 75 6d 2b 32  AX_PATH * (num+2
15c0: 29 5d 3b 0d 0a 09 09 09 09 09 3a 3a 6c 73 74 72  )];.......::lstr
15d0: 63 70 79 28 20 63 6d 64 2c 20 67 5f 73 7a 4e 6f  cpy( cmd, g_szNo
15e0: 61 68 20 29 3b 0d 0a 09 09 09 09 09 3a 3a 6c 73  ah );.......::ls
15f0: 74 72 63 61 74 28 20 63 6d 64 2c 20 22 20 22 20  trcat( cmd, " " 
1600: 29 3b 0d 0a 09 09 09 09 09 3a 3a 6c 73 74 72 63  );.......::lstrc
1610: 61 74 28 20 63 6d 64 2c 20 6f 70 74 20 29 3b 0d  at( cmd, opt );.
1620: 0a 09 09 09 09 09 2f 2f 20 64 65 73 74 64 69 72  ......// destdir
1630: 0d 0a 09 09 09 09 09 3a 3a 6c 73 74 72 63 61 74  .......::lstrcat
1640: 28 20 63 6d 64 2c 20 22 20 5c 22 2d 44 22 20 29  ( cmd, " \"-D" )
1650: 3b 0d 0a 09 09 09 09 09 3a 3a 6c 73 74 72 63 61  ;.......::lstrca
1660: 74 28 20 63 6d 64 2c 20 6d 5f 73 7a 44 69 72 20  t( cmd, m_szDir 
1670: 29 3b 0d 0a 09 09 09 09 09 3a 3a 6c 73 74 72 63  );.......::lstrc
1680: 61 74 28 20 63 6d 64 2c 20 22 5c 22 22 20 29 3b  at( cmd, "\"" );
1690: 0d 0a 09 09 09 09 09 2f 2f 20 66 69 6c 65 6c 69  .......// fileli
16a0: 73 74 0d 0a 09 09 09 09 09 63 68 61 72 20 73 74  st.......char st
16b0: 72 5b 4d 41 58 5f 50 41 54 48 5d 3b 0d 0a 09 09  r[MAX_PATH];....
16c0: 09 09 09 66 6f 72 28 20 69 6e 74 20 69 3d 30 3b  ...for( int i=0;
16d0: 20 69 21 3d 6e 75 6d 3b 20 69 2b 2b 20 29 0d 0a   i!=num; i++ )..
16e0: 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 3a 3a  .....{........::
16f0: 44 72 61 67 51 75 65 72 79 46 69 6c 65 28 20 68  DragQueryFile( h
1700: 44 72 6f 70 2c 20 69 2c 20 73 74 72 2c 20 73 69  Drop, i, str, si
1710: 7a 65 6f 66 28 73 74 72 29 20 29 3b 0d 0a 09 09  zeof(str) );....
1720: 09 09 09 09 3a 3a 6c 73 74 72 63 61 74 28 20 63  ....::lstrcat( c
1730: 6d 64 2c 20 22 20 5c 22 22 20 29 3b 0d 0a 09 09  md, " \"" );....
1740: 09 09 09 09 3a 3a 6c 73 74 72 63 61 74 28 20 63  ....::lstrcat( c
1750: 6d 64 2c 20 73 74 72 20 29 3b 0d 0a 09 09 09 09  md, str );......
1760: 09 09 3a 3a 6c 73 74 72 63 61 74 28 20 63 6d 64  ..::lstrcat( cmd
1770: 2c 20 22 5c 22 22 20 29 3b 0d 0a 09 09 09 09 09  , "\"" );.......
1780: 7d 0d 0a 09 09 09 09 09 2f 2f 20 63 61 6c 6c 20  }.......// call 
1790: 27 4e 6f 61 68 27 0d 0a 09 09 09 09 09 3a 3a 57  'Noah'.......::W
17a0: 69 6e 45 78 65 63 28 20 63 6d 64 2c 20 53 57 5f  inExec( cmd, SW_
17b0: 53 48 4f 57 44 45 46 41 55 4c 54 20 29 3b 0d 0a  SHOWDEFAULT );..
17c0: 09 09 09 09 09 64 65 6c 65 74 65 20 5b 5d 20 63  .....delete [] c
17d0: 6d 64 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09  md;......}......
17e0: 3a 3a 52 65 6c 65 61 73 65 53 74 67 4d 65 64 69  ::ReleaseStgMedi
17f0: 75 6d 28 20 26 6d 64 20 29 3b 0d 0a 09 09 09 7d  um( &md );.....}
1800: 0d 0a 09 09 09 72 65 74 75 72 6e 20 4e 4f 45 52  .....return NOER
1810: 52 4f 52 3b 0d 0a 09 09 7d 0d 0a 70 72 69 76 61  ROR;....}..priva
1820: 74 65 3a 0d 0a 09 55 4c 4f 4e 47 20 20 20 20 20  te:...ULONG     
1830: 20 20 20 6d 5f 63 52 65 66 3b 0d 0a 09 49 44 61     m_cRef;...IDa
1840: 74 61 4f 62 6a 65 63 74 2a 20 6d 5f 70 44 61 74  taObject* m_pDat
1850: 61 4f 62 6a 3b 0d 0a 09 63 68 61 72 09 09 20 6d  aObj;...char.. m
1860: 5f 73 7a 44 69 72 5b 4d 41 58 5f 50 41 54 48 5d  _szDir[MAX_PATH]
1870: 3b 0d 0a 09 62 6f 6f 6c 20 20 20 20 20 20 20 20  ;...bool        
1880: 20 6d 5f 62 43 4d 50 2c 20 6d 5f 62 45 58 54 3b   m_bCMP, m_bEXT;
1890: 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f 2d 2d 20 83 4e 83  ..};....//-- .N.
18a0: 89 83 58 8d 48 8f ea 20 2d 2d 2d 2d 2d 2d 2d 2d  ..X.H.. --------
18b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18d0: 2d 2d 2d 0d 0a 0d 0a 63 6c 61 73 73 20 6e 6f 61  ---....class noa
18e0: 68 58 74 43 6c 61 73 73 46 61 63 74 6f 72 79 20  hXtClassFactory 
18f0: 3a 20 70 75 62 6c 69 63 20 49 43 6c 61 73 73 46  : public IClassF
1900: 61 63 74 6f 72 79 0d 0a 7b 0d 0a 70 75 62 6c 69  actory..{..publi
1910: 63 3a 0d 0a 09 6e 6f 61 68 58 74 43 6c 61 73 73  c:...noahXtClass
1920: 46 61 63 74 6f 72 79 28 29 09 09 09 7b 20 6d 5f  Factory()...{ m_
1930: 63 52 65 66 20 3d 20 30 4c 3b 20 67 5f 63 52 65  cRef = 0L; g_cRe
1940: 66 2b 2b 3b 20 7d 0d 0a 09 7e 6e 6f 61 68 58 74  f++; }...~noahXt
1950: 43 6c 61 73 73 46 61 63 74 6f 72 79 28 29 09 09  ClassFactory()..
1960: 09 7b 20 67 5f 63 52 65 66 2d 2d 3b 20 7d 0d 0a  .{ g_cRef--; }..
1970: 09 53 54 44 4d 45 54 48 4f 44 49 4d 50 5f 28 55  .STDMETHODIMP_(U
1980: 4c 4f 4e 47 29 20 41 64 64 52 65 66 28 29 09 7b  LONG) AddRef().{
1990: 20 72 65 74 75 72 6e 20 28 2b 2b 6d 5f 63 52 65   return (++m_cRe
19a0: 66 29 3b 20 7d 0d 0a 09 53 54 44 4d 45 54 48 4f  f); }...STDMETHO
19b0: 44 49 4d 50 5f 28 55 4c 4f 4e 47 29 20 52 65 6c  DIMP_(ULONG) Rel
19c0: 65 61 73 65 28 29 09 7b 20 69 66 28 20 2d 2d 6d  ease().{ if( --m
19d0: 5f 63 52 65 66 20 29 72 65 74 75 72 6e 20 6d 5f  _cRef )return m_
19e0: 63 52 65 66 3b 20 64 65 6c 65 74 65 20 74 68 69  cRef; delete thi
19f0: 73 3b 20 72 65 74 75 72 6e 20 30 4c 3b 20 7d 0d  s; return 0L; }.
1a00: 0a 09 53 54 44 4d 45 54 48 4f 44 49 4d 50 20 4c  ..STDMETHODIMP L
1a10: 6f 63 6b 53 65 72 76 65 72 28 20 42 4f 4f 4c 20  ockServer( BOOL 
1a20: 29 09 7b 20 72 65 74 75 72 6e 20 4e 4f 45 52 52  ).{ return NOERR
1a30: 4f 52 3b 20 7d 0d 0a 09 53 54 44 4d 45 54 48 4f  OR; }...STDMETHO
1a40: 44 49 4d 50 20 51 75 65 72 79 49 6e 74 65 72 66  DIMP QueryInterf
1a50: 61 63 65 28 20 52 45 46 49 49 44 20 72 69 69 64  ace( REFIID riid
1a60: 2c 20 76 6f 69 64 2a 2a 20 70 70 76 20 29 0d 0a  , void** ppv )..
1a70: 09 09 7b 0d 0a 09 09 09 2a 70 70 76 20 3d 20 4e  ..{.....*ppv = N
1a80: 55 4c 4c 3b 0d 0a 09 09 09 41 64 64 52 65 66 28  ULL;.....AddRef(
1a90: 29 3b 0d 0a 09 09 09 69 66 28 20 49 73 45 71 75  );.....if( IsEqu
1aa0: 61 6c 49 49 44 28 20 72 69 69 64 2c 20 49 49 44  alIID( riid, IID
1ab0: 5f 49 55 6e 6b 6e 6f 77 6e 20 29 20 7c 7c 20 49  _IUnknown ) || I
1ac0: 73 45 71 75 61 6c 49 49 44 28 20 72 69 69 64 2c  sEqualIID( riid,
1ad0: 20 49 49 44 5f 49 43 6c 61 73 73 46 61 63 74 6f   IID_IClassFacto
1ae0: 72 79 20 29 20 29 0d 0a 09 09 09 7b 0d 0a 09 09  ry ) ).....{....
1af0: 09 09 2a 70 70 76 20 3d 20 28 49 43 6c 61 73 73  ..*ppv = (IClass
1b00: 46 61 63 74 6f 72 79 2a 29 74 68 69 73 3b 0d 0a  Factory*)this;..
1b10: 09 09 09 09 72 65 74 75 72 6e 20 4e 4f 45 52 52  ....return NOERR
1b20: 4f 52 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 52 65  OR;.....}.....Re
1b30: 6c 65 61 73 65 28 29 3b 0d 0a 09 09 09 72 65 74  lease();.....ret
1b40: 75 72 6e 20 45 5f 4e 4f 49 4e 54 45 52 46 41 43  urn E_NOINTERFAC
1b50: 45 3b 0d 0a 09 09 7d 0d 0a 09 53 54 44 4d 45 54  E;....}...STDMET
1b60: 48 4f 44 49 4d 50 20 43 72 65 61 74 65 49 6e 73  HODIMP CreateIns
1b70: 74 61 6e 63 65 28 20 49 55 6e 6b 6e 6f 77 6e 2a  tance( IUnknown*
1b80: 20 70 4f 75 74 65 72 2c 20 52 45 46 49 49 44 20   pOuter, REFIID 
1b90: 72 69 69 64 2c 20 76 6f 69 64 2a 2a 20 70 70 76  riid, void** ppv
1ba0: 4f 62 6a 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 2a  Obj )....{.....*
1bb0: 70 70 76 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 0d 0a  ppvObj = NULL;..
1bc0: 09 09 09 69 66 28 20 70 4f 75 74 65 72 20 29 0d  ...if( pOuter ).
1bd0: 0a 09 09 09 09 72 65 74 75 72 6e 20 43 4c 41 53  .....return CLAS
1be0: 53 5f 45 5f 4e 4f 41 47 47 52 45 47 41 54 49 4f  S_E_NOAGGREGATIO
1bf0: 4e 3b 0d 0a 09 09 09 6e 6f 61 68 58 74 2a 20 70  N;.....noahXt* p
1c00: 58 74 20 3d 20 6e 65 77 20 6e 6f 61 68 58 74 3b  Xt = new noahXt;
1c10: 0d 0a 09 09 09 72 65 74 75 72 6e 20 70 58 74 20  .....return pXt 
1c20: 3f 20 70 58 74 2d 3e 51 75 65 72 79 49 6e 74 65  ? pXt->QueryInte
1c30: 72 66 61 63 65 28 20 72 69 69 64 2c 20 70 70 76  rface( riid, ppv
1c40: 4f 62 6a 20 29 20 3a 20 45 5f 4f 55 54 4f 46 4d  Obj ) : E_OUTOFM
1c50: 45 4d 4f 52 59 3b 0d 0a 09 09 7d 0d 0a 70 72 69  EMORY;....}..pri
1c60: 76 61 74 65 3a 0d 0a 09 55 4c 4f 4e 47 20 6d 5f  vate:...ULONG m_
1c70: 63 52 65 66 3b 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f 2d  cRef;..};....//-
1c80: 2d 20 83 56 83 58 83 65 83 80 8c fc 82 af 41 50  - .V.X.e......AP
1c90: 49 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  I --------------
1ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 65 78 74  ---------....ext
1cc0: 65 72 6e 20 22 43 22 20 69 6e 74 20 41 50 49 45  ern "C" int APIE
1cd0: 4e 54 52 59 0d 0a 44 6c 6c 4d 61 69 6e 28 20 48  NTRY..DllMain( H
1ce0: 49 4e 53 54 41 4e 43 45 20 69 6e 73 74 2c 20 44  INSTANCE inst, D
1cf0: 57 4f 52 44 20 77 68 79 2c 20 4c 50 56 4f 49 44  WORD why, LPVOID
1d00: 20 72 65 73 65 72 76 65 64 20 29 0d 0a 7b 0d 0a   reserved )..{..
1d10: 09 69 66 28 20 77 68 79 3d 3d 44 4c 4c 5f 50 52  .if( why==DLL_PR
1d20: 4f 43 45 53 53 5f 41 54 54 41 43 48 20 29 0d 0a  OCESS_ATTACH )..
1d30: 09 7b 0d 0a 09 09 3a 3a 47 65 74 4d 6f 64 75 6c  .{....::GetModul
1d40: 65 46 69 6c 65 4e 61 6d 65 28 20 69 6e 73 74 2c  eFileName( inst,
1d50: 20 67 5f 73 7a 44 4c 4c 2c 20 73 69 7a 65 6f 66   g_szDLL, sizeof
1d60: 28 67 5f 73 7a 44 4c 4c 29 20 29 3b 0d 0a 09 09  (g_szDLL) );....
1d70: 3a 3a 6c 73 74 72 63 70 79 28 20 67 5f 73 7a 4e  ::lstrcpy( g_szN
1d80: 6f 61 68 2c 20 67 5f 73 7a 44 4c 4c 20 29 3b 0d  oah, g_szDLL );.
1d90: 0a 09 09 66 6f 72 28 20 63 68 61 72 20 2a 70 3d  ...for( char *p=
1da0: 67 5f 73 7a 4e 6f 61 68 2c 2a 79 3d 67 5f 73 7a  g_szNoah,*y=g_sz
1db0: 4e 6f 61 68 2d 31 3b 20 2a 70 3b 20 70 3d 3a 3a  Noah-1; *p; p=::
1dc0: 43 68 61 72 4e 65 78 74 28 70 29 20 29 0d 0a 09  CharNext(p) )...
1dd0: 09 09 69 66 28 20 2a 70 3d 3d 27 5c 5c 27 20 29  ..if( *p=='\\' )
1de0: 0d 0a 09 09 09 09 79 3d 70 3b 0d 0a 09 09 3a 3a  ......y=p;....::
1df0: 6c 73 74 72 63 70 79 28 20 79 2b 31 2c 20 22 4e  lstrcpy( y+1, "N
1e00: 6f 61 68 2e 65 78 65 22 20 29 3b 0d 0a 09 09 3a  oah.exe" );....:
1e10: 3a 47 65 74 53 68 6f 72 74 50 61 74 68 4e 61 6d  :GetShortPathNam
1e20: 65 28 20 67 5f 73 7a 4e 6f 61 68 2c 20 67 5f 73  e( g_szNoah, g_s
1e30: 7a 4e 6f 61 68 2c 20 4d 41 58 5f 50 41 54 48 20  zNoah, MAX_PATH 
1e40: 29 3b 0d 0a 0d 0a 09 09 4f 53 56 45 52 53 49 4f  );......OSVERSIO
1e50: 4e 49 4e 46 4f 20 6f 73 56 65 72 3b 0d 0a 09 09  NINFO osVer;....
1e60: 6f 73 56 65 72 2e 64 77 4f 53 56 65 72 73 69 6f  osVer.dwOSVersio
1e70: 6e 49 6e 66 6f 53 69 7a 65 20 3d 20 73 69 7a 65  nInfoSize = size
1e80: 6f 66 28 6f 73 56 65 72 29 3b 0d 0a 09 09 3a 3a  of(osVer);....::
1e90: 47 65 74 56 65 72 73 69 6f 6e 45 78 28 20 26 6f  GetVersionEx( &o
1ea0: 73 56 65 72 20 29 3b 0d 0a 09 09 67 5f 69 73 4e  sVer );....g_isN
1eb0: 54 20 3d 20 28 20 6f 73 56 65 72 2e 64 77 50 6c  T = ( osVer.dwPl
1ec0: 61 74 66 6f 72 6d 49 64 20 3d 3d 20 56 45 52 5f  atformId == VER_
1ed0: 50 4c 41 54 46 4f 52 4d 5f 57 49 4e 33 32 5f 4e  PLATFORM_WIN32_N
1ee0: 54 20 29 3b 0d 0a 0d 0a 09 09 67 5f 62 4a 70 6e  T );......g_bJpn
1ef0: 20 3d 20 28 3a 3a 47 65 74 55 73 65 72 44 65 66   = (::GetUserDef
1f00: 61 75 6c 74 4c 61 6e 67 49 44 28 29 3d 3d 30 78  aultLangID()==0x
1f10: 30 34 31 31 29 3b 0d 0a 09 09 67 5f 63 52 65 66  0411);....g_cRef
1f20: 20 3d 20 30 3b 0d 0a 09 09 67 5f 62 43 68 61 6e   = 0;....g_bChan
1f30: 67 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 09 7d  ged = false;...}
1f40: 0d 0a 09 65 6c 73 65 20 69 66 28 20 77 68 79 3d  ...else if( why=
1f50: 3d 44 4c 4c 5f 50 52 4f 43 45 53 53 5f 44 45 54  =DLL_PROCESS_DET
1f60: 41 43 48 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28  ACH )...{....if(
1f70: 20 67 5f 62 43 68 61 6e 67 65 64 20 29 0d 0a 09   g_bChanged )...
1f80: 09 09 3a 3a 53 48 43 68 61 6e 67 65 4e 6f 74 69  ..::SHChangeNoti
1f90: 66 79 28 20 53 48 43 4e 45 5f 41 53 53 4f 43 43  fy( SHCNE_ASSOCC
1fa0: 48 41 4e 47 45 44 2c 20 53 48 43 4e 46 5f 49 44  HANGED, SHCNF_ID
1fb0: 4c 49 53 54 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  LIST, NULL, NULL
1fc0: 20 29 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e   );...}...return
1fd0: 20 54 52 55 45 3b 0d 0a 7d 0d 0a 0d 0a 53 54 44   TRUE;..}....STD
1fe0: 41 50 49 20 44 6c 6c 43 61 6e 55 6e 6c 6f 61 64  API DllCanUnload
1ff0: 4e 6f 77 28 29 0d 0a 7b 0d 0a 20 20 20 20 72 65  Now()..{..    re
2000: 74 75 72 6e 20 28 20 67 5f 63 52 65 66 3d 3d 30  turn ( g_cRef==0
2010: 20 3f 20 53 5f 4f 4b 20 3a 20 53 5f 46 41 4c 53   ? S_OK : S_FALS
2020: 45 20 29 3b 0d 0a 7d 0d 0a 0d 0a 53 54 44 41 50  E );..}....STDAP
2030: 49 20 44 6c 6c 47 65 74 43 6c 61 73 73 4f 62 6a  I DllGetClassObj
2040: 65 63 74 28 20 52 45 46 43 4c 53 49 44 20 72 63  ect( REFCLSID rc
2050: 6c 73 69 64 2c 20 52 45 46 49 49 44 20 72 69 69  lsid, REFIID rii
2060: 64 2c 20 76 6f 69 64 2a 2a 20 70 70 76 4f 75 74  d, void** ppvOut
2070: 20 29 0d 0a 7b 0d 0a 09 2a 70 70 76 4f 75 74 20   )..{...*ppvOut 
2080: 3d 20 4e 55 4c 4c 3b 0d 0a 09 69 66 28 20 49 73  = NULL;...if( Is
2090: 45 71 75 61 6c 49 49 44 28 20 72 63 6c 73 69 64  EqualIID( rclsid
20a0: 2c 20 43 4c 53 49 44 5f 4e 6f 61 68 58 74 20 29  , CLSID_NoahXt )
20b0: 20 29 0d 0a 09 7b 0d 0a 09 09 6e 6f 61 68 58 74   )...{....noahXt
20c0: 43 6c 61 73 73 46 61 63 74 6f 72 79 2a 20 70 20  ClassFactory* p 
20d0: 3d 20 6e 65 77 20 6e 6f 61 68 58 74 43 6c 61 73  = new noahXtClas
20e0: 73 46 61 63 74 6f 72 79 3b 0d 0a 09 09 72 65 74  sFactory;....ret
20f0: 75 72 6e 20 70 2d 3e 51 75 65 72 79 49 6e 74 65  urn p->QueryInte
2100: 72 66 61 63 65 28 20 72 69 69 64 2c 20 70 70 76  rface( riid, ppv
2110: 4f 75 74 20 29 3b 0d 0a 09 7d 0d 0a 09 72 65 74  Out );...}...ret
2120: 75 72 6e 20 43 4c 41 53 53 5f 45 5f 43 4c 41 53  urn CLASS_E_CLAS
2130: 53 4e 4f 54 41 56 41 49 4c 41 42 4c 45 3b 0d 0a  SNOTAVAILABLE;..
2140: 7d 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d  }........//-----
2150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2180: 2d 2d 2d 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d  ---..//---------
2190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d  ---------------.
21c0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .//-------------
21d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d  -----------.....
2200: 0a 2f 2f 2d 2d 20 6b 69 52 65 67 4b 65 79 20 66  .//-- kiRegKey f
2210: 72 6f 6d 20 4b 2e 49 2e 4c 49 42 20 2d 2d 2d 2d  rom K.I.LIB ----
2220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2230: 2d 2d 2d 2d 2d 2f 2f 0d 0a 2f 2f 2d 2d 2d 2d 2d  -----//..//-----
2240: 2d 20 27 6e 6f 74 20 75 73 69 6e 67 20 6b 69 53  - 'not using kiS
2250: 74 72 20 26 26 20 52 45 47 5f 53 5a 20 6f 6e 6c  tr && REG_SZ onl
2260: 79 27 20 76 65 72 73 69 6f 6e 20 2d 2d 2f 2f 0d  y' version --//.
2270: 0a 0d 0a 0d 0a 63 6c 61 73 73 20 6b 69 52 65 67  .....class kiReg
2280: 4b 65 79 0d 0a 7b 0d 0a 70 75 62 6c 69 63 3a 0d  Key..{..public:.
2290: 0a 09 6b 69 52 65 67 4b 65 79 28 29 0d 0a 09 09  ..kiRegKey()....
22a0: 7b 20 6d 5f 68 4b 65 79 20 3d 20 4e 55 4c 4c 3b  { m_hKey = NULL;
22b0: 20 7d 0d 0a 09 7e 6b 69 52 65 67 4b 65 79 28 29   }...~kiRegKey()
22c0: 0d 0a 09 09 7b 20 63 6c 6f 73 65 28 29 3b 20 7d  ....{ close(); }
22d0: 0d 0a 09 6f 70 65 72 61 74 6f 72 20 48 4b 45 59  ...operator HKEY
22e0: 28 29 20 63 6f 6e 73 74 0d 0a 09 09 7b 20 72 65  () const....{ re
22f0: 74 75 72 6e 20 6d 5f 68 4b 65 79 3b 20 7d 0d 0a  turn m_hKey; }..
2300: 09 62 6f 6f 6c 20 6f 70 65 6e 28 20 48 4b 45 59  .bool open( HKEY
2310: 20 70 61 72 65 6e 74 2c 20 4c 50 43 54 53 54 52   parent, LPCTSTR
2320: 20 6b 65 79 6e 61 6d 65 2c 20 52 45 47 53 41 4d   keyname, REGSAM
2330: 20 61 63 63 65 73 73 20 29 0d 0a 09 09 7b 20 63   access )....{ c
2340: 6c 6f 73 65 28 29 3b 20 72 65 74 75 72 6e 20 28  lose(); return (
2350: 45 52 52 4f 52 5f 53 55 43 43 45 53 53 20 3d 3d  ERROR_SUCCESS ==
2360: 20 3a 3a 52 65 67 4f 70 65 6e 4b 65 79 45 78 28   ::RegOpenKeyEx(
2370: 20 70 61 72 65 6e 74 2c 20 6b 65 79 6e 61 6d 65   parent, keyname
2380: 2c 20 30 2c 20 61 63 63 65 73 73 2c 20 26 6d 5f  , 0, access, &m_
2390: 68 4b 65 79 20 29 29 3b 20 7d 0d 0a 09 62 6f 6f  hKey )); }...boo
23a0: 6c 20 63 72 65 61 74 65 28 20 48 4b 45 59 20 70  l create( HKEY p
23b0: 61 72 65 6e 74 2c 20 4c 50 43 54 53 54 52 20 6b  arent, LPCTSTR k
23c0: 65 79 6e 61 6d 65 2c 20 52 45 47 53 41 4d 20 61  eyname, REGSAM a
23d0: 63 63 65 73 73 20 29 0d 0a 09 09 7b 20 63 6c 6f  ccess )....{ clo
23e0: 73 65 28 29 3b 20 44 57 4f 52 44 20 78 3b 20 72  se(); DWORD x; r
23f0: 65 74 75 72 6e 20 28 45 52 52 4f 52 5f 53 55 43  eturn (ERROR_SUC
2400: 43 45 53 53 20 3d 3d 20 3a 3a 52 65 67 43 72 65  CESS == ::RegCre
2410: 61 74 65 4b 65 79 45 78 28 20 70 61 72 65 6e 74  ateKeyEx( parent
2420: 2c 20 6b 65 79 6e 61 6d 65 2c 20 30 2c 20 52 45  , keyname, 0, RE
2430: 47 5f 4e 4f 4e 45 2c 20 52 45 47 5f 4f 50 54 49  G_NONE, REG_OPTI
2440: 4f 4e 5f 4e 4f 4e 5f 56 4f 4c 41 54 49 4c 45 2c  ON_NON_VOLATILE,
2450: 20 61 63 63 65 73 73 2c 20 4e 55 4c 4c 2c 20 26   access, NULL, &
2460: 6d 5f 68 4b 65 79 2c 20 26 78 20 29 29 3b 20 7d  m_hKey, &x )); }
2470: 0d 0a 09 76 6f 69 64 20 63 6c 6f 73 65 28 29 0d  ...void close().
2480: 0a 09 09 7b 20 69 66 28 20 6d 5f 68 4b 65 79 20  ...{ if( m_hKey 
2490: 29 20 3a 3a 52 65 67 43 6c 6f 73 65 4b 65 79 28  ) ::RegCloseKey(
24a0: 20 6d 5f 68 4b 65 79 20 29 3b 20 7d 0d 0a 09 73   m_hKey ); }...s
24b0: 74 61 74 69 63 20 62 6f 6f 6c 20 65 78 69 73 74  tatic bool exist
24c0: 28 20 48 4b 45 59 20 70 61 72 65 6e 74 2c 20 4c  ( HKEY parent, L
24d0: 50 43 54 53 54 52 20 6b 65 79 6e 61 6d 65 20 29  PCTSTR keyname )
24e0: 0d 0a 09 09 7b 20 48 4b 45 59 20 6b 3b 20 69 66  ....{ HKEY k; if
24f0: 28 20 45 52 52 4f 52 5f 53 55 43 43 45 53 53 21  ( ERROR_SUCCESS!
2500: 3d 3a 3a 52 65 67 4f 70 65 6e 4b 65 79 45 78 28  =::RegOpenKeyEx(
2510: 20 70 61 72 65 6e 74 2c 6b 65 79 6e 61 6d 65 2c   parent,keyname,
2520: 30 2c 4b 45 59 5f 52 45 41 44 2c 26 6b 20 29 20  0,KEY_READ,&k ) 
2530: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 20  ) return false; 
2540: 3a 3a 52 65 67 43 6c 6f 73 65 4b 65 79 28 20 6b  ::RegCloseKey( k
2550: 20 29 3b 20 72 65 74 75 72 6e 20 74 72 75 65 3b   ); return true;
2560: 20 7d 0d 0a 09 62 6f 6f 6c 20 73 65 74 28 20 4c   }...bool set( L
2570: 50 43 54 53 54 52 20 76 61 6c 6e 61 6d 65 2c 20  PCTSTR valname, 
2580: 4c 50 43 54 53 54 52 20 76 61 6c 20 29 0d 0a 09  LPCTSTR val )...
2590: 09 7b 20 72 65 74 75 72 6e 20 28 45 52 52 4f 52  .{ return (ERROR
25a0: 5f 53 55 43 43 45 53 53 20 3d 3d 20 3a 3a 52 65  _SUCCESS == ::Re
25b0: 67 53 65 74 56 61 6c 75 65 45 78 28 20 6d 5f 68  gSetValueEx( m_h
25c0: 4b 65 79 2c 20 76 61 6c 6e 61 6d 65 2c 20 30 2c  Key, valname, 0,
25d0: 20 52 45 47 5f 53 5a 2c 20 28 42 59 54 45 2a 29   REG_SZ, (BYTE*)
25e0: 76 61 6c 2c 20 3a 3a 6c 73 74 72 6c 65 6e 28 76  val, ::lstrlen(v
25f0: 61 6c 29 2b 31 20 29 29 3b 20 7d 0d 0a 09 62 6f  al)+1 )); }...bo
2600: 6f 6c 20 67 65 74 28 20 4c 50 43 54 53 54 52 20  ol get( LPCTSTR 
2610: 76 61 6c 6e 61 6d 65 2c 20 63 68 61 72 2a 20 76  valname, char* v
2620: 61 6c 2c 20 44 57 4f 52 44 20 73 69 7a 20 29 0d  al, DWORD siz ).
2630: 0a 09 09 7b 20 72 65 74 75 72 6e 20 28 20 45 52  ...{ return ( ER
2640: 52 4f 52 5f 53 55 43 43 45 53 53 20 3d 3d 20 52  ROR_SUCCESS == R
2650: 65 67 51 75 65 72 79 56 61 6c 75 65 45 78 28 20  egQueryValueEx( 
2660: 6d 5f 68 4b 65 79 2c 20 76 61 6c 6e 61 6d 65 2c  m_hKey, valname,
2670: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 28 42 59   NULL, NULL, (BY
2680: 54 45 2a 29 76 61 6c 2c 20 26 73 69 7a 20 29 29  TE*)val, &siz ))
2690: 3b 20 7d 0d 0a 09 62 6f 6f 6c 20 64 65 6c 28 20  ; }...bool del( 
26a0: 4c 50 43 54 53 54 52 20 76 61 6c 6e 61 6d 65 20  LPCTSTR valname 
26b0: 29 0d 0a 09 09 7b 20 72 65 74 75 72 6e 20 28 45  )....{ return (E
26c0: 52 52 4f 52 5f 53 55 43 43 45 53 53 20 3d 3d 20  RROR_SUCCESS == 
26d0: 52 65 67 44 65 6c 65 74 65 56 61 6c 75 65 28 20  RegDeleteValue( 
26e0: 6d 5f 68 4b 65 79 2c 20 76 61 6c 6e 61 6d 65 20  m_hKey, valname 
26f0: 29 29 3b 20 7d 0d 0a 09 73 74 61 74 69 63 20 76  )); }...static v
2700: 6f 69 64 20 64 65 6c 53 75 62 4b 65 79 28 20 48  oid delSubKey( H
2710: 4b 45 59 20 6b 2c 20 4c 50 43 54 53 54 52 20 6e  KEY k, LPCTSTR n
2720: 20 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 21 67   )...{....if( !g
2730: 5f 69 73 4e 54 20 29 0d 0a 09 09 7b 0d 0a 09 09  _isNT )....{....
2740: 09 3a 3a 52 65 67 44 65 6c 65 74 65 4b 65 79 28  .::RegDeleteKey(
2750: 20 6b 2c 20 6e 20 29 3b 0d 0a 09 09 09 72 65 74   k, n );.....ret
2760: 75 72 6e 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 2f  urn;....}....../
2770: 2f 20 4e 54 8c 6e 82 c5 82 cd 81 41 83 54 83 75  / NT.n.....A.T.u
2780: 83 4c 81 5b 82 cc 82 a0 82 e9 83 4c 81 5b 82 cd  .L.[.......L.[..
2790: 8f c1 82 b9 82 c8 82 a2 82 cc 82 c5 8d c4 8b 41  ...............A
27a0: 93 49 82 c9 81 42 0d 0a 09 09 2f 2f 20 82 b5 82  .I...B....// ...
27b0: a9 82 e0 45 6e 75 6d 92 86 82 c9 44 65 6c 65 74  ...Enum....Delet
27c0: 65 82 cd 82 c5 82 ab 82 c8 82 a2 8f e3 82 c9 76  e..............v
27d0: 65 63 74 6f 72 3c 73 74 72 69 6e 67 3e 93 99 82  ector<string>...
27e0: e0 0d 0a 09 09 2f 2f 20 95 95 88 f3 82 b5 82 c4  .....// ........
27f0: 82 a2 82 e9 82 bd 82 df 82 ed 82 af 82 cc 82 ed  ................
2800: 82 a9 82 e7 82 f1 83 52 81 5b 83 68 82 c9 82 c8  .......R.[.h....
2810: 82 c1 82 c4 82 dc 82 b7 81 42 0d 0a 0d 0a 09 09  .........B......
2820: 2f 2f 20 8f c1 82 b5 82 bd 82 a2 83 4c 81 5b 82  // .........L.[.
2830: f0 8a 4a 82 ad 0d 0a 09 09 48 4b 45 59 20 6b 32  ..J......HKEY k2
2840: 3b 0d 0a 09 09 77 68 69 6c 65 28 20 45 52 52 4f  ;....while( ERRO
2850: 52 5f 53 55 43 43 45 53 53 20 3d 3d 20 3a 3a 52  R_SUCCESS == ::R
2860: 65 67 4f 70 65 6e 4b 65 79 45 78 28 20 6b 2c 6e  egOpenKeyEx( k,n
2870: 2c 30 2c 4b 45 59 5f 45 4e 55 4d 45 52 41 54 45  ,0,KEY_ENUMERATE
2880: 5f 53 55 42 5f 4b 45 59 53 7c 4b 45 59 5f 53 45  _SUB_KEYS|KEY_SE
2890: 54 5f 56 41 4c 55 45 2c 26 6b 32 20 29 20 29 0d  T_VALUE,&k2 ) ).
28a0: 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 82 50 8c c2  ...{.....// .P..
28b0: 96 da 82 cc 8e 71 83 4c 81 5b 96 bc 82 f0 8e e6  .....q.L.[......
28c0: 93 be 0d 0a 09 09 09 63 68 61 72 20 62 75 66 5b  .......char buf[
28d0: 32 30 30 5d 3b 0d 0a 09 09 09 44 57 4f 52 44 20  200];.....DWORD 
28e0: 62 73 20 3d 20 73 69 7a 65 6f 66 28 62 75 66 29  bs = sizeof(buf)
28f0: 3b 0d 0a 09 09 09 69 66 28 20 45 52 52 4f 52 5f  ;.....if( ERROR_
2900: 53 55 43 43 45 53 53 20 3d 3d 20 3a 3a 52 65 67  SUCCESS == ::Reg
2910: 45 6e 75 6d 4b 65 79 45 78 28 20 6b 32 2c 30 2c  EnumKeyEx( k2,0,
2920: 62 75 66 2c 26 62 73 2c 4e 55 4c 4c 2c 4e 55 4c  buf,&bs,NULL,NUL
2930: 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 20 29 20 29 0d  L,NULL,NULL ) ).
2940: 0a 09 09 09 7b 0d 0a 09 09 09 09 2f 2f 20 82 a0  ....{......// ..
2950: 82 ea 82 ce 82 bb 82 ea 82 f0 8d ed 8f 9c 0d 0a  ................
2960: 09 09 09 09 64 65 6c 53 75 62 4b 65 79 28 20 6b  ....delSubKey( k
2970: 32 2c 20 62 75 66 20 29 3b 0d 0a 09 09 09 09 3a  2, buf );......:
2980: 3a 52 65 67 43 6c 6f 73 65 4b 65 79 28 20 6b 32  :RegCloseKey( k2
2990: 20 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c   );.....}.....el
29a0: 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 2f 2f  se.....{......//
29b0: 20 82 c8 82 af 82 ea 82 ce 81 41 8f c1 82 b5 82   .........A.....
29c0: bd 82 a2 83 4c 81 5b 82 f0 8f c1 82 b9 82 e9 0d  ....L.[.........
29d0: 0a 09 09 09 09 3a 3a 52 65 67 43 6c 6f 73 65 4b  .....::RegCloseK
29e0: 65 79 28 20 6b 32 20 29 3b 0d 0a 09 09 09 09 3a  ey( k2 );......:
29f0: 3a 52 65 67 44 65 6c 65 74 65 4b 65 79 28 20 6b  :RegDeleteKey( k
2a00: 2c 20 6e 20 29 3b 0d 0a 09 09 09 09 72 65 74 75  , n );......retu
2a10: 72 6e 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a  rn;.....}....}..
2a20: 09 7d 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 09 48  .}..private:...H
2a30: 4b 45 59 20 6d 5f 68 4b 65 79 3b 0d 0a 7d 3b 0d  KEY m_hKey;..};.
2a40: 0a 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d  .......//-------
2a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a80: 2d 0d 0a 2f 2f 2d 2d 20 4e 6f 61 68 82 cc 90 dd  -..//-- Noah....
2a90: 92 e8 97 70 41 50 49 82 c8 82 c7 20 2d 2d 2d 2d  ...pAPI.... ----
2aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a  --------------..
2ac0: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
2ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a  ----------......
2b00: 0d 0a 63 68 61 72 20 67 5f 73 7a 41 73 43 6d 64  ..char g_szAsCmd
2b10: 5b 4d 41 58 5f 50 41 54 48 2b 31 30 5d 3b 0d 0a  [MAX_PATH+10];..
2b20: 63 68 61 72 20 67 5f 73 7a 41 73 49 63 6f 6e 5b  char g_szAsIcon[
2b30: 4d 41 58 5f 50 41 54 48 2b 31 30 5d 3b 0d 0a 0d  MAX_PATH+10];...
2b40: 0a 0d 0a 2f 2f 20 8a c7 97 9d 8e d2 8c a0 8c c0  ...// ..........
2b50: 94 bb 95 ca 0d 0a 2f 2f 2d 2d 20 49 73 41 64 6d  ......//-- IsAdm
2b60: 69 6e 28 29 20 3a 20 76 65 72 79 20 76 65 72 79  in() : very very
2b70: 20 74 68 61 6e 6b 73 21 20 74 6f 20 61 72 64 72   thanks! to ardr
2b80: 79 2c 20 74 68 65 20 61 75 74 68 6f 72 20 6f 66  y, the author of
2b90: 20 27 6d 65 6c 74 69 63 65 27 2e 0d 0a 0d 0a 62   'meltice'.....b
2ba0: 6f 6f 6c 20 49 73 41 64 6d 69 6e 28 29 0d 0a 7b  ool IsAdmin()..{
2bb0: 0d 0a 09 62 6f 6f 6c 20 69 73 61 64 6d 69 6e 3d  ...bool isadmin=
2bc0: 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f 2f 2d 2d 20  false;.....//-- 
2bd0: 39 78 91 ce 8d f4 82 cc 82 bd 82 df 81 41 93 ae  9x...........A..
2be0: 93 49 82 c9 44 4c 4c 83 8d 81 5b 83 68 0d 0a 09  .I..DLL...[.h...
2bf0: 48 49 4e 53 54 41 4e 43 45 20 68 49 6e 73 74 44  HINSTANCE hInstD
2c00: 6c 6c 20 3d 20 73 61 66 65 70 61 74 68 4c 6f 61  ll = safepathLoa
2c10: 64 4c 69 62 72 61 72 79 28 20 22 4e 65 74 41 50  dLibrary( "NetAP
2c20: 49 33 32 22 20 29 3b 0d 0a 09 69 66 28 20 21 68  I32" );...if( !h
2c30: 49 6e 73 74 44 6c 6c 20 29 0d 0a 09 09 72 65 74  InstDll )....ret
2c40: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f  urn false;...../
2c50: 2f 2d 2d 20 4e 65 74 55 73 65 72 47 65 74 4c 6f  /-- NetUserGetLo
2c60: 63 61 6c 47 72 6f 75 70 65 73 20 41 50 49 20 8e  calGroupes API .
2c70: e6 93 be 0d 0a 09 74 79 70 65 64 65 66 20 4e 45  ......typedef NE
2c80: 54 5f 41 50 49 5f 53 54 41 54 55 53 20 28 4e 45  T_API_STATUS (NE
2c90: 54 5f 41 50 49 5f 46 55 4e 43 54 49 4f 4e 20 2a  T_API_FUNCTION *
2ca0: 50 4e 45 54 55 53 52 47 45 54 4c 43 4c 47 52 50  PNETUSRGETLCLGRP
2cb0: 29 28 4c 50 43 57 53 54 52 2c 77 63 68 61 72 5f  )(LPCWSTR,wchar_
2cc0: 74 20 2a 2c 44 57 4f 52 44 2c 44 57 4f 52 44 2c  t *,DWORD,DWORD,
2cd0: 56 4f 49 44 2a 2c 44 57 4f 52 44 2c 4c 50 44 57  VOID*,DWORD,LPDW
2ce0: 4f 52 44 2c 4c 50 44 57 4f 52 44 29 3b 0d 0a 09  ORD,LPDWORD);...
2cf0: 50 4e 45 54 55 53 52 47 45 54 4c 43 4c 47 52 50  PNETUSRGETLCLGRP
2d00: 20 70 4e 65 74 55 73 65 72 47 65 74 4c 6f 63 61   pNetUserGetLoca
2d10: 6c 47 72 6f 75 70 73 20 3d 20 28 50 4e 45 54 55  lGroups = (PNETU
2d20: 53 52 47 45 54 4c 43 4c 47 52 50 29 3a 3a 47 65  SRGETLCLGRP)::Ge
2d30: 74 50 72 6f 63 41 64 64 72 65 73 73 28 68 49 6e  tProcAddress(hIn
2d40: 73 74 44 6c 6c 2c 20 22 4e 65 74 55 73 65 72 47  stDll, "NetUserG
2d50: 65 74 4c 6f 63 61 6c 47 72 6f 75 70 73 22 29 3b  etLocalGroups");
2d60: 0d 0a 09 69 66 28 20 21 70 4e 65 74 55 73 65 72  ...if( !pNetUser
2d70: 47 65 74 4c 6f 63 61 6c 47 72 6f 75 70 73 20 29  GetLocalGroups )
2d80: 0d 0a 09 7b 0d 0a 09 09 3a 3a 46 72 65 65 4c 69  ...{....::FreeLi
2d90: 62 72 61 72 79 28 20 68 49 6e 73 74 44 6c 6c 20  brary( hInstDll 
2da0: 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20 66 61 6c  );....return fal
2db0: 73 65 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 2d 2d  se;...}.....//--
2dc0: 20 83 86 81 5b 83 55 81 5b 96 bc 8e e6 93 be 0d   ...[.U.[.......
2dd0: 0a 09 63 68 61 72 20 20 20 20 75 73 65 72 41 5b  ..char    userA[
2de0: 32 35 36 5d 3b 0d 0a 09 77 63 68 61 72 5f 74 20  256];...wchar_t 
2df0: 75 73 65 72 57 5b 32 35 36 5d 3b 0d 0a 09 44 57  userW[256];...DW
2e00: 4f 52 44 20 20 20 74 6d 70 20 3d 20 32 35 36 3b  ORD   tmp = 256;
2e10: 0d 0a 09 3a 3a 47 65 74 55 73 65 72 4e 61 6d 65  ...::GetUserName
2e20: 28 20 75 73 65 72 41 2c 20 26 74 6d 70 20 29 3b  ( userA, &tmp );
2e30: 0d 0a 09 3a 3a 4d 75 6c 74 69 42 79 74 65 54 6f  ...::MultiByteTo
2e40: 57 69 64 65 43 68 61 72 28 20 43 50 5f 41 43 50  WideChar( CP_ACP
2e50: 2c 20 30 2c 20 75 73 65 72 41 2c 20 2d 31 2c 20  , 0, userA, -1, 
2e60: 75 73 65 72 57 2c 20 32 35 35 20 29 3b 0d 0a 0d  userW, 255 );...
2e70: 0a 09 2f 2f 2d 2d 20 96 7b 8b d8 0d 0a 09 4c 4f  ..//-- .{.....LO
2e80: 43 41 4c 47 52 4f 55 50 5f 55 53 45 52 53 5f 49  CALGROUP_USERS_I
2e90: 4e 46 4f 5f 30 2a 20 70 42 75 66 3b 0d 0a 09 44  NFO_0* pBuf;...D
2ea0: 57 4f 52 44 20 65 6e 74 72 79 3b 0d 0a 09 63 68  WORD entry;...ch
2eb0: 61 72 20 62 75 66 5b 32 35 36 5d 3b 0d 0a 0d 0a  ar buf[256];....
2ec0: 09 69 66 28 20 30 20 3d 3d 20 70 4e 65 74 55 73  .if( 0 == pNetUs
2ed0: 65 72 47 65 74 4c 6f 63 61 6c 47 72 6f 75 70 73  erGetLocalGroups
2ee0: 28 4e 55 4c 4c 2c 75 73 65 72 57 2c 30 2c 30 2c  (NULL,userW,0,0,
2ef0: 28 42 59 54 45 2a 2a 29 26 70 42 75 66 2c 2d 31  (BYTE**)&pBuf,-1
2f00: 2c 26 65 6e 74 72 79 2c 26 74 6d 70 29 20 29 0d  ,&entry,&tmp) ).
2f10: 0a 09 7b 0d 0a 09 09 66 6f 72 28 20 75 6e 73 69  ..{....for( unsi
2f20: 67 6e 65 64 20 69 6e 74 20 69 3d 30 3b 20 69 3c  gned int i=0; i<
2f30: 65 6e 74 72 79 3b 20 69 2b 2b 20 29 0d 0a 09 09  entry; i++ )....
2f40: 7b 0d 0a 09 09 09 3a 3a 57 69 64 65 43 68 61 72  {.....::WideChar
2f50: 54 6f 4d 75 6c 74 69 42 79 74 65 28 20 43 50 5f  ToMultiByte( CP_
2f60: 41 43 50 2c 20 30 2c 20 70 42 75 66 5b 69 5d 2e  ACP, 0, pBuf[i].
2f70: 6c 67 72 75 69 30 5f 6e 61 6d 65 2c 20 2d 31 2c  lgrui0_name, -1,
2f80: 20 62 75 66 2c 20 32 35 36 2c 20 4e 55 4c 4c 2c   buf, 256, NULL,
2f90: 20 4e 55 4c 4c 20 29 3b 0d 0a 0d 0a 09 09 09 69   NULL );.......i
2fa0: 66 28 20 30 20 3d 3d 20 3a 3a 6c 73 74 72 63 6d  f( 0 == ::lstrcm
2fb0: 70 28 20 62 75 66 2c 20 22 41 64 6d 69 6e 69 73  p( buf, "Adminis
2fc0: 74 72 61 74 6f 72 73 22 20 29 20 29 0d 0a 09 09  trators" ) )....
2fd0: 09 7b 0d 0a 09 09 09 09 69 73 61 64 6d 69 6e 3d  .{......isadmin=
2fe0: 74 72 75 65 3b 0d 0a 09 09 09 09 62 72 65 61 6b  true;......break
2ff0: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d 0a  ;.....}....}....
3000: 09 09 2f 2f 2d 2d 20 83 81 83 82 83 8a 89 f0 95  ..//-- .........
3010: fa 0d 0a 09 09 74 79 70 65 64 65 66 20 4e 45 54  .....typedef NET
3020: 5f 41 50 49 5f 53 54 41 54 55 53 20 28 4e 45 54  _API_STATUS (NET
3030: 5f 41 50 49 5f 46 55 4e 43 54 49 4f 4e 20 2a 20  _API_FUNCTION * 
3040: 50 4e 45 54 41 50 49 42 55 46 46 45 52 46 52 45  PNETAPIBUFFERFRE
3050: 45 29 28 76 6f 69 64 2a 29 3b 0d 0a 09 09 50 4e  E)(void*);....PN
3060: 45 54 41 50 49 42 55 46 46 45 52 46 52 45 45 20  ETAPIBUFFERFREE 
3070: 70 4e 65 74 41 70 69 42 75 66 66 65 72 46 72 65  pNetApiBufferFre
3080: 65 20 3d 20 28 50 4e 45 54 41 50 49 42 55 46 46  e = (PNETAPIBUFF
3090: 45 52 46 52 45 45 29 3a 3a 47 65 74 50 72 6f 63  ERFREE)::GetProc
30a0: 41 64 64 72 65 73 73 28 20 68 49 6e 73 74 44 6c  Address( hInstDl
30b0: 6c 2c 20 22 4e 65 74 41 70 69 42 75 66 66 65 72  l, "NetApiBuffer
30c0: 46 72 65 65 22 20 29 3b 0d 0a 09 09 69 66 28 20  Free" );....if( 
30d0: 70 4e 65 74 41 70 69 42 75 66 66 65 72 46 72 65  pNetApiBufferFre
30e0: 65 20 29 0d 0a 09 09 09 70 4e 65 74 41 70 69 42  e ).....pNetApiB
30f0: 75 66 66 65 72 46 72 65 65 28 20 70 42 75 66 20  ufferFree( pBuf 
3100: 29 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 2d 2d 20  );...}.....//-- 
3110: 44 4c 4c 89 f0 95 fa 0d 0a 09 3a 3a 46 72 65 65  DLL.......::Free
3120: 4c 69 62 72 61 72 79 28 20 68 49 6e 73 74 44 6c  Library( hInstDl
3130: 6c 20 29 3b 0d 0a 09 72 65 74 75 72 6e 20 69 73  l );...return is
3140: 61 64 6d 69 6e 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 20  admin;..}....// 
3150: 83 8c 83 57 83 58 83 67 83 8a 82 d6 82 cc 8f 91  ...W.X.g........
3160: 82 ab 8d 9e 82 dd 8c a0 8c c0 94 bb 92 e8 81 63  ...............c
3170: 82 a4 82 dc 82 ad 82 a2 82 a9 82 c8 82 a2 82 e7  ................
3180: 82 b5 82 a2 0d 0a 2f 2f 0d 0a 2f 2f 62 6f 6f 6c  ......//..//bool
3190: 20 49 73 52 65 67 57 72 69 74 61 62 6c 65 28 29   IsRegWritable()
31a0: 0d 0a 2f 2f 7b 0d 0a 2f 2f 09 48 4b 45 59 20 6b  ..//{..//.HKEY k
31b0: 65 79 3b 0d 0a 2f 2f 09 69 66 28 20 45 52 52 4f  ey;..//.if( ERRO
31c0: 52 5f 53 55 43 43 45 53 53 20 21 3d 20 2f 2f 20  R_SUCCESS != // 
31d0: 93 4b 93 96 82 c8 83 4e 83 89 83 58 83 4c 81 5b  .K.....N...X.L.[
31e0: 82 d6 82 cc 8f 91 82 ab 8d 9e 82 dd 8c a0 8c c0  ................
31f0: 82 f0 92 b2 82 d7 82 e9 0d 0a 2f 2f 09 09 3a 3a  ..........//..::
3200: 52 65 67 4f 70 65 6e 4b 65 79 45 78 28 20 48 4b  RegOpenKeyEx( HK
3210: 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 2c  EY_CLASSES_ROOT,
3220: 20 22 74 74 66 66 69 6c 65 22 2c 20 30 2c 20 4b   "ttffile", 0, K
3230: 45 59 5f 57 52 49 54 45 2c 20 26 6b 65 79 20 29  EY_WRITE, &key )
3240: 20 29 0d 0a 2f 2f 09 09 72 65 74 75 72 6e 20 66   )..//..return f
3250: 61 6c 73 65 3b 0d 0a 2f 2f 09 3a 3a 52 65 67 43  alse;..//.::RegC
3260: 6c 6f 73 65 4b 65 79 28 20 6b 65 79 20 29 3b 0d  loseKey( key );.
3270: 0a 2f 2f 09 72 65 74 75 72 6e 20 74 72 75 65 3b  .//.return true;
3280: 0d 0a 2f 2f 7d 0d 0a 0d 0a 2f 2f 2a 2a 20 62 6f  ..//}....//** bo
3290: 6f 6c 20 49 6e 69 74 28 29 0d 0a 2f 2f 2a 2a 0d  ol Init()..//**.
32a0: 0a 2f 2f 2a 2a 20 20 20 90 dd 92 e8 89 e6 96 ca  .//**   ........
32b0: 97 70 82 c9 8b 4e 93 ae 82 b7 82 e9 82 c6 82 ab  .p...N..........
32c0: 82 cd 8d c5 8f 89 82 c9 83 52 83 8c 82 f0 8c c4  .........R......
32d0: 82 d4 82 b1 82 c6 81 42 0d 0a 2f 2f 2a 2a 20 20  .......B..//**  
32e0: 20 66 61 6c 73 65 20 82 aa 95 d4 82 c1 82 c4 82   false .........
32f0: ab 82 bd 82 c6 82 ab 82 cd 81 41 8f 94 8e 96 8f  ..........A.....
3300: ee 82 c9 82 e6 82 e8 97 98 97 70 82 c5 82 ab 82  ..........p.....
3310: c8 82 a2 82 b1 82 c6 82 f0 8e a6 82 b7 81 42 0d  ..............B.
3320: 0a 62 6f 6f 6c 20 57 49 4e 41 50 49 20 49 6e 69  .bool WINAPI Ini
3330: 74 28 29 0d 0a 7b 0d 0a 09 3a 3a 77 73 70 72 69  t()..{...::wspri
3340: 6e 74 66 28 20 67 5f 73 7a 41 73 49 63 6f 6e 2c  ntf( g_szAsIcon,
3350: 20 22 25 73 2c 25 25 64 22 2c 20 67 5f 73 7a 44   "%s,%%d", g_szD
3360: 4c 4c 20 29 3b 0d 0a 09 3a 3a 77 73 70 72 69 6e  LL );...::wsprin
3370: 74 66 28 20 67 5f 73 7a 41 73 43 6d 64 20 2c 20  tf( g_szAsCmd , 
3380: 22 25 73 20 2d 78 20 5c 22 25 25 31 5c 22 22 2c  "%s -x \"%%1\"",
3390: 20 67 5f 73 7a 4e 6f 61 68 20 29 3b 0d 0a 0d 0a   g_szNoah );....
33a0: 09 69 66 28 20 67 5f 69 73 4e 54 20 29 0d 0a 09  .if( g_isNT )...
33b0: 09 69 66 28 20 21 49 73 41 64 6d 69 6e 28 29 20  .if( !IsAdmin() 
33c0: 29 0d 0a 2f 2f 09 09 09 69 66 28 20 21 49 73 52  )..//...if( !IsR
33d0: 65 67 57 72 69 74 61 62 6c 65 28 29 20 29 0d 0a  egWritable() )..
33e0: 09 09 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65  ....return false
33f0: 3b 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 74 72 75  ;.....return tru
3400: 65 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2a 2a 20 76 6f  e;..}....//** vo
3410: 69 64 20 4c 6f 61 64 53 45 28 20 62 6f 6f 6c 2a  id LoadSE( bool*
3420: 20 61 2c 20 62 6f 6f 6c 2a 20 78 20 29 0d 0a 2f   a, bool* x )../
3430: 2f 2a 2a 0d 0a 2f 2f 2a 2a 20 20 20 83 56 83 46  /**..//**   .V.F
3440: 83 8b 83 47 83 4e 83 58 83 65 83 93 83 56 83 87  ...G.N.X.e...V..
3450: 83 93 82 cc 90 dd 92 e8 82 f0 95 d4 82 b7 81 42  ...............B
3460: 0d 0a 2f 2f 2a 2a 20 20 20 61 3a 20 5b 82 b1 82  ..//**   a: [...
3470: b1 82 c9 88 b3 8f 6b 5d 82 aa 4f 4e 82 a9 94 db  ......k]..ON....
3480: 82 a9 20 20 78 3a 20 5b 82 b1 82 b1 82 c9 89 f0  ..  x: [........
3490: 93 80 5d 82 aa 4f 4e 82 a9 94 db 82 a9 0d 0a 76  ..]..ON........v
34a0: 6f 69 64 20 57 49 4e 41 50 49 20 4c 6f 61 64 53  oid WINAPI LoadS
34b0: 45 28 20 62 6f 6f 6c 2a 20 61 2c 20 62 6f 6f 6c  E( bool* a, bool
34c0: 2a 20 78 20 29 0d 0a 7b 0d 0a 09 2a 61 20 3d 20  * x )..{...*a = 
34d0: 6b 69 52 65 67 4b 65 79 3a 3a 65 78 69 73 74 28  kiRegKey::exist(
34e0: 20 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f   HKEY_CLASSES_RO
34f0: 4f 54 2c 20 22 43 4c 53 49 44 5c 5c 7b 39 35 33  OT, "CLSID\\{953
3500: 41 46 41 45 39 2d 43 32 41 39 2d 34 36 37 34 2d  AFAE9-C2A9-4674-
3510: 39 38 31 31 2d 44 37 45 32 38 31 42 30 30 31 45  9811-D7E281B001E
3520: 31 7d 5c 5c 43 53 68 6c 22 20 29 3b 0d 0a 09 2a  1}\\CShl" );...*
3530: 78 20 3d 20 6b 69 52 65 67 4b 65 79 3a 3a 65 78  x = kiRegKey::ex
3540: 69 73 74 28 20 48 4b 45 59 5f 43 4c 41 53 53 45  ist( HKEY_CLASSE
3550: 53 5f 52 4f 4f 54 2c 20 22 43 4c 53 49 44 5c 5c  S_ROOT, "CLSID\\
3560: 7b 39 35 33 41 46 41 45 39 2d 43 32 41 39 2d 34  {953AFAE9-C2A9-4
3570: 36 37 34 2d 39 38 31 31 2d 44 37 45 32 38 31 42  674-9811-D7E281B
3580: 30 30 31 45 31 7d 5c 5c 4d 53 68 6c 22 20 29 3b  001E1}\\MShl" );
3590: 0d 0a 7d 0d 0a 0d 0a 2f 2f 2a 2a 20 76 6f 69 64  ..}....//** void
35a0: 20 53 61 76 65 53 45 28 20 62 6f 6f 6c 20 61 2c   SaveSE( bool a,
35b0: 20 62 6f 6f 6c 20 78 20 29 0d 0a 2f 2f 2a 2a 0d   bool x )..//**.
35c0: 0a 2f 2f 2a 2a 20 20 20 83 56 83 46 83 8b 83 47  .//**   .V.F...G
35d0: 83 4e 83 58 83 65 83 93 83 56 83 87 83 93 82 cc  .N.X.e...V......
35e0: 90 dd 92 e8 82 f0 95 db 91 b6 82 b7 82 e9 81 42  ...............B
35f0: 0d 0a 2f 2f 2a 2a 20 20 20 61 3a 20 5b 82 b1 82  ..//**   a: [...
3600: b1 82 c9 88 b3 8f 6b 5d 82 aa 4f 4e 82 a9 94 db  ......k]..ON....
3610: 82 a9 20 20 78 3a 20 5b 82 b1 82 b1 82 c9 89 f0  ..  x: [........
3620: 93 80 5d 82 aa 4f 4e 82 a9 94 db 82 a9 0d 0a 76  ..]..ON........v
3630: 6f 69 64 20 57 49 4e 41 50 49 20 53 61 76 65 53  oid WINAPI SaveS
3640: 45 28 20 62 6f 6f 6c 20 61 2c 20 62 6f 6f 6c 20  E( bool a, bool 
3650: 78 20 29 0d 0a 7b 0d 0a 09 6b 69 52 65 67 4b 65  x )..{...kiRegKe
3660: 79 20 6b 65 79 2c 20 6b 65 79 32 3b 0d 0a 0d 0a  y key, key2;....
3670: 09 69 66 28 20 21 61 20 26 26 20 21 78 20 29 0d  .if( !a && !x ).
3680: 0a 09 7b 0d 0a 09 09 6b 69 52 65 67 4b 65 79 3a  ..{....kiRegKey:
3690: 3a 64 65 6c 53 75 62 4b 65 79 28 20 48 4b 45 59  :delSubKey( HKEY
36a0: 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 2c 20 22  _CLASSES_ROOT, "
36b0: 43 4c 53 49 44 5c 5c 7b 39 35 33 41 46 41 45 39  CLSID\\{953AFAE9
36c0: 2d 43 32 41 39 2d 34 36 37 34 2d 39 38 31 31 2d  -C2A9-4674-9811-
36d0: 44 37 45 32 38 31 42 30 30 31 45 31 7d 22 20 29  D7E281B001E1}" )
36e0: 3b 0d 0a 09 09 6b 69 52 65 67 4b 65 79 3a 3a 64  ;....kiRegKey::d
36f0: 65 6c 53 75 62 4b 65 79 28 20 48 4b 45 59 5f 43  elSubKey( HKEY_C
3700: 4c 41 53 53 45 53 5f 52 4f 4f 54 2c 20 22 46 6f  LASSES_ROOT, "Fo
3710: 6c 64 65 72 5c 5c 73 68 65 6c 6c 65 78 5c 5c 44  lder\\shellex\\D
3720: 72 61 67 44 72 6f 70 48 61 6e 64 6c 65 72 73 5c  ragDropHandlers\
3730: 5c 4e 6f 61 68 58 74 22 20 29 3b 0d 0a 09 09 6b  \NoahXt" );....k
3740: 69 52 65 67 4b 65 79 3a 3a 64 65 6c 53 75 62 4b  iRegKey::delSubK
3750: 65 79 28 20 48 4b 45 59 5f 43 4c 41 53 53 45 53  ey( HKEY_CLASSES
3760: 5f 52 4f 4f 54 2c 20 22 44 72 69 76 65 5c 5c 73  _ROOT, "Drive\\s
3770: 68 65 6c 6c 65 78 5c 5c 44 72 61 67 44 72 6f 70  hellex\\DragDrop
3780: 48 61 6e 64 6c 65 72 73 5c 5c 4e 6f 61 68 58 74  Handlers\\NoahXt
3790: 22 20 29 3b 0d 0a 09 09 69 66 28 20 6b 65 79 2e  " );....if( key.
37a0: 6f 70 65 6e 28 20 48 4b 45 59 5f 43 4c 41 53 53  open( HKEY_CLASS
37b0: 45 53 5f 52 4f 4f 54 2c 20 22 53 6f 66 74 77 61  ES_ROOT, "Softwa
37c0: 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 57  re\\Microsoft\\W
37d0: 69 6e 64 6f 77 73 5c 5c 43 75 72 72 65 6e 74 56  indows\\CurrentV
37e0: 65 72 73 69 6f 6e 5c 5c 53 68 65 6c 6c 20 45 78  ersion\\Shell Ex
37f0: 74 65 6e 73 69 6f 6e 73 5c 5c 41 70 70 72 6f 76  tensions\\Approv
3800: 65 64 22 2c 20 4b 45 59 5f 53 45 54 5f 56 41 4c  ed", KEY_SET_VAL
3810: 55 45 20 29 20 29 0d 0a 09 09 09 6b 65 79 2e 64  UE ) ).....key.d
3820: 65 6c 28 20 22 7b 39 35 33 41 46 41 45 39 2d 43  el( "{953AFAE9-C
3830: 32 41 39 2d 34 36 37 34 2d 39 38 31 31 2d 44 37  2A9-4674-9811-D7
3840: 45 32 38 31 42 30 30 31 45 31 7d 22 20 29 3b 0d  E281B001E1}" );.
3850: 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a  ..}...else...{..
3860: 09 09 2f 2f 20 43 4c 53 49 44 20 93 6f 98 5e 0d  ..// CLSID .o.^.
3870: 0a 09 09 6b 65 79 2e 63 72 65 61 74 65 28 20 48  ...key.create( H
3880: 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54  KEY_CLASSES_ROOT
3890: 2c 20 22 43 4c 53 49 44 5c 5c 7b 39 35 33 41 46  , "CLSID\\{953AF
38a0: 41 45 39 2d 43 32 41 39 2d 34 36 37 34 2d 39 38  AE9-C2A9-4674-98
38b0: 31 31 2d 44 37 45 32 38 31 42 30 30 31 45 31 7d  11-D7E281B001E1}
38c0: 22 2c 20 4b 45 59 5f 57 52 49 54 45 20 29 3b 0d  ", KEY_WRITE );.
38d0: 0a 09 09 09 6b 65 79 2e 73 65 74 28 20 22 22 2c  ....key.set( "",
38e0: 20 50 72 6f 67 49 44 5f 4e 6f 61 68 58 74 20 29   ProgID_NoahXt )
38f0: 3b 0d 0a 09 09 09 6b 65 79 32 2e 63 72 65 61 74  ;.....key2.creat
3900: 65 28 20 6b 65 79 2c 20 22 49 6e 70 72 6f 63 53  e( key, "InprocS
3910: 65 72 76 65 72 33 32 22 2c 20 4b 45 59 5f 57 52  erver32", KEY_WR
3920: 49 54 45 20 29 3b 0d 0a 09 09 09 09 6b 65 79 32  ITE );......key2
3930: 2e 73 65 74 28 20 22 22 2c 20 67 5f 73 7a 44 4c  .set( "", g_szDL
3940: 4c 20 29 3b 0d 0a 09 09 09 09 6b 65 79 32 2e 73  L );......key2.s
3950: 65 74 28 20 22 54 68 72 65 61 64 69 6e 67 4d 6f  et( "ThreadingMo
3960: 64 65 6c 22 2c 20 22 41 70 61 72 74 6d 65 6e 74  del", "Apartment
3970: 22 20 29 3b 0d 0a 09 09 69 66 28 61 29 6b 65 79  " );....if(a)key
3980: 32 2e 63 72 65 61 74 65 28 20 6b 65 79 2c 20 22  2.create( key, "
3990: 43 53 68 6c 22 2c 20 4b 45 59 5f 52 45 41 44 20  CShl", KEY_READ 
39a0: 29 3b 0d 0a 09 09 65 6c 73 65 20 6b 69 52 65 67  );....else kiReg
39b0: 4b 65 79 3a 3a 64 65 6c 53 75 62 4b 65 79 28 20  Key::delSubKey( 
39c0: 6b 65 79 2c 20 22 43 53 68 6c 22 20 29 3b 0d 0a  key, "CShl" );..
39d0: 09 09 69 66 28 78 29 6b 65 79 32 2e 63 72 65 61  ..if(x)key2.crea
39e0: 74 65 28 20 6b 65 79 2c 20 22 4d 53 68 6c 22 2c  te( key, "MShl",
39f0: 20 4b 45 59 5f 52 45 41 44 20 29 3b 0d 0a 09 09   KEY_READ );....
3a00: 65 6c 73 65 20 6b 69 52 65 67 4b 65 79 3a 3a 64  else kiRegKey::d
3a10: 65 6c 53 75 62 4b 65 79 28 20 6b 65 79 2c 20 22  elSubKey( key, "
3a20: 4d 53 68 6c 22 20 29 3b 0d 0a 0d 0a 09 09 2f 2f  MShl" );......//
3a30: 20 46 6f 6c 64 65 72 20 82 cc 20 44 6e 44 20 48   Folder .. DnD H
3a40: 61 6e 64 6c 65 72 20 82 c6 82 b5 82 c4 93 6f 98  andler .......o.
3a50: 5e 0d 0a 09 09 6b 65 79 2e 63 72 65 61 74 65 28  ^....key.create(
3a60: 20 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f   HKEY_CLASSES_RO
3a70: 4f 54 2c 20 22 46 6f 6c 64 65 72 5c 5c 73 68 65  OT, "Folder\\she
3a80: 6c 6c 65 78 5c 5c 44 72 61 67 44 72 6f 70 48 61  llex\\DragDropHa
3a90: 6e 64 6c 65 72 73 5c 5c 4e 6f 61 68 58 74 22 2c  ndlers\\NoahXt",
3aa0: 20 4b 45 59 5f 57 52 49 54 45 20 29 3b 0d 0a 09   KEY_WRITE );...
3ab0: 09 09 6b 65 79 2e 73 65 74 28 20 22 22 2c 20 22  ..key.set( "", "
3ac0: 7b 39 35 33 41 46 41 45 39 2d 43 32 41 39 2d 34  {953AFAE9-C2A9-4
3ad0: 36 37 34 2d 39 38 31 31 2d 44 37 45 32 38 31 42  674-9811-D7E281B
3ae0: 30 30 31 45 31 7d 22 20 29 3b 0d 0a 09 09 2f 2f  001E1}" );....//
3af0: 20 44 72 69 76 65 20 82 cc 20 44 6e 44 20 48 61   Drive .. DnD Ha
3b00: 6e 64 6c 65 72 20 82 c6 82 b5 82 c4 93 6f 98 5e  ndler .......o.^
3b10: 0d 0a 09 09 6b 65 79 2e 63 72 65 61 74 65 28 20  ....key.create( 
3b20: 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f  HKEY_CLASSES_ROO
3b30: 54 2c 20 22 44 72 69 76 65 5c 5c 73 68 65 6c 6c  T, "Drive\\shell
3b40: 65 78 5c 5c 44 72 61 67 44 72 6f 70 48 61 6e 64  ex\\DragDropHand
3b50: 6c 65 72 73 5c 5c 4e 6f 61 68 58 74 22 2c 20 4b  lers\\NoahXt", K
3b60: 45 59 5f 57 52 49 54 45 20 29 3b 0d 0a 09 09 09  EY_WRITE );.....
3b70: 6b 65 79 2e 73 65 74 28 20 22 22 2c 20 22 7b 39  key.set( "", "{9
3b80: 35 33 41 46 41 45 39 2d 43 32 41 39 2d 34 36 37  53AFAE9-C2A9-467
3b90: 34 2d 39 38 31 31 2d 44 37 45 32 38 31 42 30 30  4-9811-D7E281B00
3ba0: 31 45 31 7d 22 20 29 3b 0d 0a 0d 0a 09 09 2f 2f  1E1}" );......//
3bb0: 20 4e 54 8c 6e 97 70 82 c9 81 41 41 70 70 72 6f   NT.n.p...AAppro
3bc0: 76 65 64 20 4c 69 73 74 20 82 c9 8f 91 82 a2 82  ved List .......
3bd0: c4 82 a8 82 ad 0d 0a 09 09 69 66 28 20 67 5f 69  .........if( g_i
3be0: 73 4e 54 20 26 26 20 6b 65 79 2e 6f 70 65 6e 28  sNT && key.open(
3bf0: 20 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f   HKEY_CLASSES_RO
3c00: 4f 54 2c 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d  OT, "Software\\M
3c10: 69 63 72 6f 73 6f 66 74 5c 5c 57 69 6e 64 6f 77  icrosoft\\Window
3c20: 73 5c 5c 43 75 72 72 65 6e 74 56 65 72 73 69 6f  s\\CurrentVersio
3c30: 6e 5c 5c 53 68 65 6c 6c 20 45 78 74 65 6e 73 69  n\\Shell Extensi
3c40: 6f 6e 73 5c 5c 41 70 70 72 6f 76 65 64 22 2c 20  ons\\Approved", 
3c50: 4b 45 59 5f 53 45 54 5f 56 41 4c 55 45 20 29 20  KEY_SET_VALUE ) 
3c60: 29 0d 0a 09 09 09 6b 65 79 2e 73 65 74 28 20 22  ).....key.set( "
3c70: 7b 39 35 33 41 46 41 45 39 2d 43 32 41 39 2d 34  {953AFAE9-C2A9-4
3c80: 36 37 34 2d 39 38 31 31 2d 44 37 45 32 38 31 42  674-9811-D7E281B
3c90: 30 30 31 45 31 7d 22 2c 20 50 72 6f 67 49 44 5f  001E1}", ProgID_
3ca0: 4e 6f 61 68 58 74 20 29 3b 0d 0a 09 7d 0d 0a 7d  NoahXt );...}..}
3cb0: 0d 0a 0d 0a 76 6f 69 64 20 61 73 73 6f 5f 6f 6e  ....void asso_on
3cc0: 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 65 78  ( const char* ex
3cd0: 74 2c 20 63 6f 6e 73 74 20 69 6e 74 20 6e 6f 20  t, const int no 
3ce0: 29 3b 0d 0a 76 6f 69 64 20 61 73 73 6f 5f 6f 66  );..void asso_of
3cf0: 66 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 65  f( const char* e
3d00: 78 74 2c 20 63 6f 6e 73 74 20 69 6e 74 20 6e 6f  xt, const int no
3d10: 20 29 3b 0d 0a 62 6f 6f 6c 20 69 73 5f 61 73 73   );..bool is_ass
3d20: 6f 5f 6f 6e 28 20 63 6f 6e 73 74 20 63 68 61 72  o_on( const char
3d30: 2a 20 65 78 74 20 29 3b 0d 0a 0d 0a 65 6e 75 6d  * ext );....enum
3d40: 20 7b 20 41 5f 42 45 47 49 4e 2c 20 4c 5a 48 3d   { A_BEGIN, LZH=
3d50: 30 2c 20 5a 49 50 2c 20 43 41 42 2c 20 52 41 52  0, ZIP, CAB, RAR
3d60: 2c 20 54 41 52 2c 20 59 5a 31 2c 20 47 43 41 2c  , TAR, YZ1, GCA,
3d70: 20 41 52 4a 2c 20 42 47 41 2c 20 41 43 45 2c 20   ARJ, BGA, ACE, 
3d80: 43 50 54 2c 20 4a 41 4b 2c 20 41 5f 45 4e 44 2c  CPT, JAK, A_END,
3d90: 0d 0a 20 20 20 20 20 20 20 4f 54 48 3d 41 5f 45  ..       OTH=A_E
3da0: 4e 44 2c 20 53 76 6e 5a 3d 43 50 54 20 7d 3b 0d  ND, SvnZ=CPT };.
3db0: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68  .static const ch
3dc0: 61 72 2a 20 65 78 74 5f 6c 69 73 74 5b 5d 20 3d  ar* ext_list[] =
3dd0: 20 7b 0d 0a 09 22 6c 7a 68 5c 30 6c 7a 73 5c 30   {..."lzh\0lzs\0
3de0: 6c 68 61 5c 30 22 2c 0d 0a 09 22 7a 69 70 5c 30  lha\0",..."zip\0
3df0: 22 2c 0d 0a 09 22 63 61 62 5c 30 22 2c 0d 0a 09  ",..."cab\0",...
3e00: 22 72 61 72 5c 30 22 2c 0d 0a 09 22 74 61 72 5c  "rar\0",..."tar\
3e10: 30 74 67 7a 5c 30 74 62 7a 5c 30 74 61 7a 5c 30  0tgz\0tbz\0taz\0
3e20: 67 7a 5c 30 62 7a 32 5c 30 7a 5c 30 78 7a 5c 30  gz\0bz2\0z\0xz\0
3e30: 6c 7a 6d 61 5c 30 22 2c 0d 0a 09 22 79 7a 31 5c  lzma\0",..."yz1\
3e40: 30 22 2c 0d 0a 09 22 67 63 61 5c 30 22 2c 0d 0a  0",..."gca\0",..
3e50: 09 22 61 72 6a 5c 30 22 2c 0d 0a 09 22 67 7a 61  ."arj\0",..."gza
3e60: 5c 30 62 7a 61 5c 30 22 2c 0d 0a 09 22 61 63 65  \0bza\0",..."ace
3e70: 5c 30 22 2c 0d 0a 09 22 63 70 74 5c 30 22 2c 0d  \0",..."cpt\0",.
3e80: 0a 09 22 6a 61 6b 5c 30 22 2c 0d 0a 7d 3b 0d 0a  .."jak\0",..};..
3e90: 0d 0a 2f 2f 2a 2a 20 76 6f 69 64 20 4c 6f 61 64  ..//** void Load
3ea0: 41 53 28 20 62 6f 6f 6c 20 61 73 73 6f 5b 5d 20  AS( bool asso[] 
3eb0: 29 0d 0a 2f 2f 2a 2a 0d 0a 2f 2f 2a 2a 20 20 20  )..//**..//**   
3ec0: 95 57 8f 80 82 cc 8a d6 98 41 95 74 82 af 82 cc  .W.......A.t....
3ed0: 90 dd 92 e8 82 f0 95 d4 82 b7 81 42 0d 0a 2f 2f  ...........B..//
3ee0: 2a 2a 20 20 20 4c 5a 48 3d 30 2c 20 5a 49 50 2c  **   LZH=0, ZIP,
3ef0: 20 43 41 42 2c 20 52 41 52 2c 20 54 41 52 2c 20   CAB, RAR, TAR, 
3f00: 59 5a 31 2c 20 47 43 41 2c 20 41 52 4a 2c 20 42  YZ1, GCA, ARJ, B
3f10: 47 41 2c 20 41 43 45 2c 20 43 50 54 2c 20 4a 41  GA, ACE, CPT, JA
3f20: 4b 0d 0a 76 6f 69 64 20 57 49 4e 41 50 49 20 4c  K..void WINAPI L
3f30: 6f 61 64 41 53 28 20 62 6f 6f 6c 20 61 73 73 6f  oadAS( bool asso
3f40: 5b 5d 20 29 0d 0a 7b 0d 0a 09 66 6f 72 28 20 69  [] )..{...for( i
3f50: 6e 74 20 69 3d 41 5f 42 45 47 49 4e 3b 20 69 3c  nt i=A_BEGIN; i<
3f60: 41 5f 45 4e 44 3b 20 69 2b 2b 20 29 0d 0a 09 09  A_END; i++ )....
3f70: 61 73 73 6f 5b 69 5d 20 3d 20 69 73 5f 61 73 73  asso[i] = is_ass
3f80: 6f 5f 6f 6e 28 20 65 78 74 5f 6c 69 73 74 5b 69  o_on( ext_list[i
3f90: 5d 20 29 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2a 2a 20  ] );..}....//** 
3fa0: 76 6f 69 64 20 53 61 76 65 41 53 28 20 62 6f 6f  void SaveAS( boo
3fb0: 6c 20 61 73 73 6f 5b 5d 20 29 0d 0a 2f 2f 2a 2a  l asso[] )..//**
3fc0: 0d 0a 2f 2f 2a 2a 20 20 20 95 57 8f 80 82 cc 8a  ..//**   .W.....
3fd0: d6 98 41 95 74 82 af 82 cc 90 dd 92 e8 82 f0 95  ..A.t...........
3fe0: db 91 b6 81 42 0d 0a 2f 2f 2a 2a 20 20 20 4c 5a  ....B..//**   LZ
3ff0: 48 3d 30 2c 20 5a 49 50 2c 20 43 41 42 2c 20 52  H=0, ZIP, CAB, R
4000: 41 52 2c 20 54 41 52 2c 20 59 5a 31 2c 20 47 43  AR, TAR, YZ1, GC
4010: 41 2c 20 41 52 4a 2c 20 42 47 41 2c 20 41 43 45  A, ARJ, BGA, ACE
4020: 2c 20 43 50 54 2c 20 4a 41 4b 0d 0a 76 6f 69 64  , CPT, JAK..void
4030: 20 57 49 4e 41 50 49 20 53 61 76 65 41 53 28 20   WINAPI SaveAS( 
4040: 62 6f 6f 6c 20 61 73 73 6f 5b 5d 20 29 0d 0a 7b  bool asso[] )..{
4050: 0d 0a 09 66 6f 72 28 20 69 6e 74 20 69 3d 41 5f  ...for( int i=A_
4060: 42 45 47 49 4e 3b 20 69 3c 41 5f 45 4e 44 3b 20  BEGIN; i<A_END; 
4070: 69 2b 2b 20 29 0d 0a 09 7b 0d 0a 09 09 69 6e 74  i++ )...{....int
4080: 20 69 63 6f 6e 5f 74 79 70 65 20 3d 20 69 3b 0d   icon_type = i;.
4090: 0a 09 09 69 66 28 20 69 3d 3d 43 50 54 20 29 20  ...if( i==CPT ) 
40a0: 69 63 6f 6e 5f 74 79 70 65 20 3d 20 4f 54 48 3b  icon_type = OTH;
40b0: 20 2f 2f 20 76 33 2e 31 39 35 3a 20 63 70 74 82   // v3.195: cpt.
40c0: cd 81 41 22 82 bb 82 cc 91 bc 22 83 41 83 43 83  ..A"......".A.C.
40d0: 52 83 93 0d 0a 0d 0a 09 09 69 66 28 20 61 73 73  R........if( ass
40e0: 6f 5b 69 5d 20 29 0d 0a 09 09 09 61 73 73 6f 5f  o[i] ).....asso_
40f0: 6f 6e 28 20 65 78 74 5f 6c 69 73 74 5b 69 5d 2c  on( ext_list[i],
4100: 20 69 63 6f 6e 5f 74 79 70 65 20 29 3b 0d 0a 09   icon_type );...
4110: 09 65 6c 73 65 0d 0a 09 09 09 61 73 73 6f 5f 6f  .else.....asso_o
4120: 66 66 28 20 65 78 74 5f 6c 69 73 74 5b 69 5d 2c  ff( ext_list[i],
4130: 20 69 63 6f 6e 5f 74 79 70 65 20 29 3b 0d 0a 09   icon_type );...
4140: 7d 0d 0a 7d 0d 0a 0d 0a 2f 2f 2a 2a 20 76 6f 69  }..}....//** voi
4150: 64 20 4c 6f 61 64 41 53 45 78 28 20 63 6f 6e 73  d LoadASEx( cons
4160: 74 20 63 68 61 72 2a 20 65 78 74 2c 20 62 6f 6f  t char* ext, boo
4170: 6c 2a 20 78 20 29 0d 0a 2f 2f 2a 2a 0d 0a 2f 2f  l* x )..//**..//
4180: 2a 2a 20 20 20 8e 77 92 e8 82 b5 82 bd 8a 67 92  **   .w.......g.
4190: a3 8e 71 82 aa 4e 6f 61 68 82 c9 8a d6 98 41 95  ..q..Noah.....A.
41a0: 74 82 af 82 e7 82 ea 82 c4 82 a2 82 e9 82 a9 82  t...............
41b0: c7 82 a4 82 a9 82 f0 95 d4 82 b7 0d 0a 76 6f 69  .............voi
41c0: 64 20 57 49 4e 41 50 49 20 4c 6f 61 64 41 53 45  d WINAPI LoadASE
41d0: 78 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 65  x( const char* e
41e0: 78 74 2c 20 62 6f 6f 6c 2a 20 78 20 29 0d 0a 7b  xt, bool* x )..{
41f0: 0d 0a 09 2a 78 20 3d 20 69 73 5f 61 73 73 6f 5f  ...*x = is_asso_
4200: 6f 6e 28 20 65 78 74 20 29 3b 0d 0a 7d 0d 0a 0d  on( ext );..}...
4210: 0a 2f 2f 2a 2a 20 76 6f 69 64 20 53 61 76 65 41  .//** void SaveA
4220: 53 45 78 28 20 63 6f 6e 73 74 20 63 68 61 72 2a  SEx( const char*
4230: 20 65 78 74 2c 20 62 6f 6f 6c 20 78 20 29 0d 0a   ext, bool x )..
4240: 2f 2f 2a 2a 0d 0a 2f 2f 2a 2a 20 20 20 8e 77 92  //**..//**   .w.
4250: e8 82 b5 82 bd 8a 67 92 a3 8e 71 82 f0 4e 6f 61  ......g...q..Noa
4260: 68 82 c9 8a d6 98 41 95 74 82 af 82 bd 82 e8 89  h.....A.t.......
4270: f0 8f 9c 82 b5 82 bd 82 e8 0d 0a 76 6f 69 64 20  ...........void 
4280: 57 49 4e 41 50 49 20 53 61 76 65 41 53 45 78 28  WINAPI SaveASEx(
4290: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 65 78 74   const char* ext
42a0: 2c 20 62 6f 6f 6c 20 78 20 29 0d 0a 7b 0d 0a 09  , bool x )..{...
42b0: 69 6e 74 20 69 63 6f 6e 5f 74 79 70 65 20 3d 20  int icon_type = 
42c0: 4f 54 48 3b 20 20 20 20 20 20 20 20 20 20 20 20  OTH;            
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
42e0: 83 66 83 74 83 48 83 8b 83 67 82 cd 22 82 bb 82  .f.t.H...g.."...
42f0: cc 91 bc 22 83 41 83 43 83 52 83 93 0d 0a 09 69  ...".A.C.R.....i
4300: 66 28 20 30 3d 3d 6c 73 74 72 63 6d 70 28 65 78  f( 0==lstrcmp(ex
4310: 74 2c 22 37 7a 22 29 20 29 20 69 63 6f 6e 5f 74  t,"7z") ) icon_t
4320: 79 70 65 20 3d 20 53 76 6e 5a 3b 20 2f 2f 20 76  ype = SvnZ; // v
4330: 33 2e 31 39 35 3a 20 37 7a 82 c9 8c c0 82 e8 81  3.195: 7z.......
4340: 41 37 7a 90 ea 97 70 83 41 83 43 83 52 83 93 0d  A7z...p.A.C.R...
4350: 0a 0d 0a 09 69 66 28 20 78 20 29 09 61 73 73 6f  ....if( x ).asso
4360: 5f 6f 6e 28 20 20 65 78 74 2c 20 69 63 6f 6e 5f  _on(  ext, icon_
4370: 74 79 70 65 20 29 3b 0d 0a 09 65 6c 73 65 09 61  type );...else.a
4380: 73 73 6f 5f 6f 66 66 28 20 65 78 74 2c 20 69 63  sso_off( ext, ic
4390: 6f 6e 5f 74 79 70 65 20 29 3b 0d 0a 7d 0d 0a 0d  on_type );..}...
43a0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .//-------------
43b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43e0: 2d 2d 0d 0a 0d 0a 0d 0a 23 64 65 66 69 6e 65 20  --......#define 
43f0: 73 74 65 70 28 5f 78 29 20 20 20 20 28 5f 78 2b  step(_x)    (_x+
4400: 3d 3a 3a 6c 73 74 72 6c 65 6e 28 5f 78 29 2b 31  =::lstrlen(_x)+1
4410: 29 0d 0a 23 64 65 66 69 6e 65 20 4d 6c 74 43 6d  )..#define MltCm
4420: 64 20 20 20 20 20 20 28 67 5f 62 4a 70 6e 20 3f  d      (g_bJpn ?
4430: 20 22 89 f0 93 80 28 26 45 29 22 20 3a 20 22 26   "....(&E)" : "&
4440: 45 78 74 72 61 63 74 22 29 0d 0a 23 64 65 66 69  Extract")..#defi
4450: 6e 65 20 4a 6e 74 43 6d 64 20 20 20 20 20 20 28  ne JntCmd      (
4460: 67 5f 62 4a 70 6e 20 3f 20 22 8c 8b 8d 87 28 26  g_bJpn ? "....(&
4470: 45 29 22 20 3a 20 22 43 6f 6d 62 69 6e 26 65 22  E)" : "Combin&e"
4480: 29 0d 0a 23 64 65 66 69 6e 65 20 4d 6c 74 54 79  )..#define MltTy
4490: 70 20 20 20 20 20 20 28 67 5f 62 4a 70 6e 20 3f  p      (g_bJpn ?
44a0: 20 22 8f 91 8c c9 28 25 73 29 22 20 3a 20 22 41   "....(%s)" : "A
44b0: 72 63 68 69 76 65 28 25 73 29 22 29 0d 0a 23 64  rchive(%s)")..#d
44c0: 65 66 69 6e 65 20 4a 6e 74 54 79 70 20 20 20 20  efine JntTyp    
44d0: 20 20 28 67 5f 62 4a 70 6e 20 3f 20 22 95 aa 8a    (g_bJpn ? "...
44e0: 84 83 74 83 40 83 43 83 8b 28 25 73 29 22 20 3a  ..t.@.C..(%s)" :
44f0: 20 22 52 69 70 70 65 72 65 64 46 69 6c 65 28 25   "RipperedFile(%
4500: 73 29 22 29 0d 0a 23 64 65 66 69 6e 65 20 43 6d  s)")..#define Cm
4510: 64 4e 61 6d 65 28 5f 6e 29 20 28 5f 6e 3d 3d 4a  dName(_n) (_n==J
4520: 41 4b 20 3f 20 4a 6e 74 43 6d 64 20 3a 20 4d 6c  AK ? JntCmd : Ml
4530: 74 43 6d 64 29 0d 0a 23 64 65 66 69 6e 65 20 54  tCmd)..#define T
4540: 79 70 4e 61 6d 65 28 5f 6e 29 20 28 5f 6e 3d 3d  ypName(_n) (_n==
4550: 4a 41 4b 20 3f 20 4a 6e 74 54 79 70 20 3a 20 4d  JAK ? JntTyp : M
4560: 6c 74 54 79 70 29 0d 0a 0d 0a 73 74 61 74 69 63  ltTyp)....static
4570: 20 76 6f 69 64 20 72 65 63 6f 76 65 72 5f 7a 69   void recover_zi
4580: 70 28 29 0d 0a 7b 0d 0a 09 69 66 28 20 6b 69 52  p()..{...if( kiR
4590: 65 67 4b 65 79 3a 3a 65 78 69 73 74 28 20 48 4b  egKey::exist( HK
45a0: 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 2c  EY_CLASSES_ROOT,
45b0: 20 22 43 6f 6d 70 72 65 73 73 65 64 46 6f 6c 64   "CompressedFold
45c0: 65 72 22 20 29 20 29 0d 0a 09 7b 0d 0a 09 09 6b  er" ) )...{....k
45d0: 69 52 65 67 4b 65 79 20 6b 65 79 2c 20 6b 65 79  iRegKey key, key
45e0: 32 3b 0d 0a 09 09 69 66 28 20 6b 65 79 2e 63 72  2;....if( key.cr
45f0: 65 61 74 65 28 20 48 4b 45 59 5f 43 4c 41 53 53  eate( HKEY_CLASS
4600: 45 53 5f 52 4f 4f 54 2c 20 22 2e 7a 69 70 22 2c  ES_ROOT, ".zip",
4610: 20 4b 45 59 5f 57 52 49 54 45 20 29 20 29 0d 0a   KEY_WRITE ) )..
4620: 09 09 7b 0d 0a 09 09 09 6b 65 79 2e 73 65 74 28  ..{.....key.set(
4630: 20 22 22 2c 20 22 43 6f 6d 70 72 65 73 73 65 64   "", "Compressed
4640: 46 6f 6c 64 65 72 22 20 29 3b 0d 0a 09 09 09 69  Folder" );.....i
4650: 66 28 20 6b 65 79 32 2e 63 72 65 61 74 65 28 20  f( key2.create( 
4660: 6b 65 79 2c 20 22 53 68 65 6c 6c 4e 65 77 22 2c  key, "ShellNew",
4670: 20 4b 45 59 5f 57 52 49 54 45 20 29 20 29 0d 0a   KEY_WRITE ) )..
4680: 09 09 09 09 6b 65 79 32 2e 73 65 74 28 20 22 4e  ....key2.set( "N
4690: 75 6c 6c 46 49 6c 65 22 2c 20 22 22 20 29 3b 0d  ullFIle", "" );.
46a0: 0a 09 09 7d 0d 0a 09 7d 0d 0a 7d 0d 0a 73 74 61  ...}...}..}..sta
46b0: 74 69 63 20 76 6f 69 64 20 72 65 63 6f 76 65 72  tic void recover
46c0: 5f 63 61 62 28 29 0d 0a 7b 0d 0a 09 69 66 28 20  _cab()..{...if( 
46d0: 6b 69 52 65 67 4b 65 79 3a 3a 65 78 69 73 74 28  kiRegKey::exist(
46e0: 20 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f   HKEY_CLASSES_RO
46f0: 4f 54 2c 20 22 43 4c 53 49 44 5c 5c 7b 30 43 44  OT, "CLSID\\{0CD
4700: 37 41 35 43 30 2d 39 46 33 37 2d 31 31 43 45 2d  7A5C0-9F37-11CE-
4710: 41 45 36 35 2d 30 38 30 30 32 42 32 45 31 32 36  AE65-08002B2E126
4720: 32 7d 22 20 29 20 29 0d 0a 09 7b 0d 0a 09 09 6b  2}" ) )...{....k
4730: 69 52 65 67 4b 65 79 20 6b 65 79 3b 0d 0a 09 09  iRegKey key;....
4740: 69 66 28 20 6b 65 79 2e 63 72 65 61 74 65 28 20  if( key.create( 
4750: 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f  HKEY_CLASSES_ROO
4760: 54 2c 20 22 2e 63 61 62 22 2c 20 4b 45 59 5f 57  T, ".cab", KEY_W
4770: 52 49 54 45 20 29 20 29 0d 0a 09 09 09 6b 65 79  RITE ) ).....key
4780: 2e 73 65 74 28 20 22 22 2c 20 22 43 4c 53 49 44  .set( "", "CLSID
4790: 5c 5c 7b 30 43 44 37 41 35 43 30 2d 39 46 33 37  \\{0CD7A5C0-9F37
47a0: 2d 31 31 43 45 2d 41 45 36 35 2d 30 38 30 30 32  -11CE-AE65-08002
47b0: 42 32 45 31 32 36 32 7d 22 20 29 3b 0d 0a 09 7d  B2E1262}" );...}
47c0: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 61 73 73 6f  ..}....void asso
47d0: 5f 6f 6e 28 20 63 6f 6e 73 74 20 63 68 61 72 2a  _on( const char*
47e0: 20 65 78 74 2c 20 63 6f 6e 73 74 20 69 6e 74 20   ext, const int 
47f0: 6e 6f 20 29 0d 0a 7b 0d 0a 09 69 66 28 20 69 73  no )..{...if( is
4800: 5f 61 73 73 6f 5f 6f 6e 28 20 65 78 74 20 29 20  _asso_on( ext ) 
4810: 29 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 67  )....return;...g
4820: 5f 62 43 68 61 6e 67 65 64 20 3d 20 74 72 75 65  _bChanged = true
4830: 3b 0d 0a 0d 0a 09 6b 69 52 65 67 4b 65 79 20 6b  ;.....kiRegKey k
4840: 65 79 2c 20 6b 65 79 32 2c 20 6b 65 79 33 2c 20  ey, key2, key3, 
4850: 6b 65 79 34 3b 0d 0a 09 63 68 61 72 20 73 74 72  key4;...char str
4860: 5b 35 30 30 5d 2c 61 73 63 5b 32 30 5d 3d 22 4e  [500],asc[20]="N
4870: 6f 61 68 58 74 2e 22 3b 0d 0a 09 3a 3a 6c 73 74  oahXt.";...::lst
4880: 72 63 70 79 28 20 61 73 63 2b 37 2c 20 65 78 74  rcpy( asc+7, ext
4890: 20 29 3b 0d 0a 0d 0a 09 66 6f 72 28 20 63 6f 6e   );.....for( con
48a0: 73 74 20 63 68 61 72 2a 20 70 3d 65 78 74 3b 20  st char* p=ext; 
48b0: 2a 70 3b 20 73 74 65 70 28 70 29 20 29 0d 0a 09  *p; step(p) )...
48c0: 7b 0d 0a 09 09 2f 2f 2d 2d 20 22 48 4b 43 52 2f  {....//-- "HKCR/
48d0: 2e 6c 7a 68 22 20 3d 20 22 4e 6f 61 68 58 74 2e  .lzh" = "NoahXt.
48e0: 6c 7a 68 22 2c 20 22 48 4b 43 52 2f 2e 6c 7a 73  lzh", "HKCR/.lzs
48f0: 22 20 3d 20 22 4e 6f 61 68 58 74 2e 6c 7a 68 22  " = "NoahXt.lzh"
4900: 20 2e 2e 2e 0d 0a 09 09 73 74 72 5b 30 5d 3d 27   .......str[0]='
4910: 2e 27 2c 20 3a 3a 6c 73 74 72 63 70 79 28 20 73  .', ::lstrcpy( s
4920: 74 72 2b 31 2c 20 70 20 29 3b 0d 0a 09 09 69 66  tr+1, p );....if
4930: 28 20 6b 65 79 2e 63 72 65 61 74 65 28 20 48 4b  ( key.create( HK
4940: 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 2c  EY_CLASSES_ROOT,
4950: 20 73 74 72 2c 20 4b 45 59 5f 57 52 49 54 45 20   str, KEY_WRITE 
4960: 29 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 6b 65 79  ) )....{.....key
4970: 2e 73 65 74 28 20 22 22 2c 20 61 73 63 20 29 3b  .set( "", asc );
4980: 0d 0a 09 09 09 6b 69 52 65 67 4b 65 79 3a 3a 64  .....kiRegKey::d
4990: 65 6c 53 75 62 4b 65 79 28 20 6b 65 79 2c 20 22  elSubKey( key, "
49a0: 53 68 65 6c 6c 4e 65 77 22 20 29 3b 0d 0a 09 09  ShellNew" );....
49b0: 7d 0d 0a 09 7d 0d 0a 0d 0a 09 69 66 28 20 6b 65  }...}.....if( ke
49c0: 79 2e 63 72 65 61 74 65 28 20 48 4b 45 59 5f 43  y.create( HKEY_C
49d0: 4c 41 53 53 45 53 5f 52 4f 4f 54 2c 20 61 73 63  LASSES_ROOT, asc
49e0: 2c 20 4b 45 59 5f 57 52 49 54 45 20 29 20 29 0d  , KEY_WRITE ) ).
49f0: 0a 09 7b 0d 0a 09 09 2f 2f 2d 2d 20 22 48 4b 43  ..{....//-- "HKC
4a00: 52 2f 4e 6f 61 68 58 74 2e 6c 7a 68 22 20 3d 20  R/NoahXt.lzh" = 
4a10: 22 8f 91 8c c9 28 20 6c 7a 68 20 29 22 0d 0a 09  "....( lzh )"...
4a20: 09 3a 3a 77 73 70 72 69 6e 74 66 28 20 73 74 72  .::wsprintf( str
4a30: 2c 20 54 79 70 4e 61 6d 65 28 6e 6f 29 2c 20 65  , TypName(no), e
4a40: 78 74 20 29 3b 0d 0a 09 09 6b 65 79 2e 73 65 74  xt );....key.set
4a50: 28 20 22 22 2c 20 73 74 72 20 29 3b 0d 0a 09 09  ( "", str );....
4a60: 6b 65 79 2e 64 65 6c 28 20 22 45 64 69 74 46 6c  key.del( "EditFl
4a70: 61 67 73 22 20 29 3b 0d 0a 0d 0a 09 09 69 66 28  ags" );......if(
4a80: 20 6b 65 79 32 2e 63 72 65 61 74 65 28 20 6b 65   key2.create( ke
4a90: 79 2c 20 22 44 65 66 61 75 6c 74 49 63 6f 6e 22  y, "DefaultIcon"
4aa0: 2c 20 4b 45 59 5f 57 52 49 54 45 20 29 20 29 0d  , KEY_WRITE ) ).
4ab0: 0a 09 09 7b 0d 0a 09 09 09 2f 2f 2d 2d 20 22 48  ...{.....//-- "H
4ac0: 4b 43 52 2f 4e 6f 61 68 58 74 2e 6c 7a 68 2f 44  KCR/NoahXt.lzh/D
4ad0: 65 66 61 75 6c 74 49 63 6f 6e 22 20 3d 20 22 2e  efaultIcon" = ".
4ae0: 2e 2e 4e 6f 61 68 2e 65 78 65 2c 20 31 22 0d 0a  ..Noah.exe, 1"..
4af0: 09 09 09 3a 3a 77 73 70 72 69 6e 74 66 28 20 73  ...::wsprintf( s
4b00: 74 72 2c 20 67 5f 73 7a 41 73 49 63 6f 6e 2c 20  tr, g_szAsIcon, 
4b10: 6e 6f 20 29 3b 0d 0a 09 09 09 6b 65 79 32 2e 73  no );.....key2.s
4b20: 65 74 28 20 22 22 2c 20 73 74 72 20 29 3b 0d 0a  et( "", str );..
4b30: 09 09 7d 0d 0a 0d 0a 09 09 69 66 28 20 6b 65 79  ..}......if( key
4b40: 32 2e 63 72 65 61 74 65 28 20 6b 65 79 2c 20 22  2.create( key, "
4b50: 53 68 65 6c 6c 22 2c 20 4b 45 59 5f 57 52 49 54  Shell", KEY_WRIT
4b60: 45 20 29 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 2f  E ) )....{...../
4b70: 2f 2d 2d 20 22 48 4b 43 52 2f 4e 6f 61 68 58 74  /-- "HKCR/NoahXt
4b80: 2e 6c 7a 68 2f 53 68 65 6c 6c 22 20 3d 20 22 4f  .lzh/Shell" = "O
4b90: 70 65 6e 22 0d 0a 09 09 09 6b 65 79 32 2e 73 65  pen".....key2.se
4ba0: 74 28 20 22 22 2c 20 22 4f 70 65 6e 22 20 29 3b  t( "", "Open" );
4bb0: 0d 0a 09 09 09 69 66 28 20 6b 65 79 33 2e 63 72  .....if( key3.cr
4bc0: 65 61 74 65 28 20 6b 65 79 32 2c 20 22 4f 70 65  eate( key2, "Ope
4bd0: 6e 22 2c 20 4b 45 59 5f 57 52 49 54 45 20 29 20  n", KEY_WRITE ) 
4be0: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 2f 2f 2d  ).....{......//-
4bf0: 2d 20 20 22 48 4b 43 52 2f 4e 6f 61 68 58 74 2e  -  "HKCR/NoahXt.
4c00: 6c 7a 68 2f 53 68 65 6c 6c 2f 4f 70 65 6e 22 20  lzh/Shell/Open" 
4c10: 3d 20 22 89 f0 93 80 28 26 58 29 22 0d 0a 09 09  = "....(&X)"....
4c20: 09 09 6b 65 79 33 2e 73 65 74 28 20 22 22 2c 20  ..key3.set( "", 
4c30: 43 6d 64 4e 61 6d 65 28 6e 6f 29 20 29 3b 0d 0a  CmdName(no) );..
4c40: 09 09 09 09 69 66 28 20 6b 65 79 34 2e 63 72 65  ....if( key4.cre
4c50: 61 74 65 28 20 6b 65 79 33 2c 20 22 43 6f 6d 6d  ate( key3, "Comm
4c60: 61 6e 64 22 2c 20 4b 45 59 5f 57 52 49 54 45 20  and", KEY_WRITE 
4c70: 29 20 29 0d 0a 09 09 09 09 09 2f 2f 2d 2d 20 20  ) ).......//--  
4c80: 22 48 4b 43 52 2f 4e 6f 61 68 58 74 2e 6c 7a 68  "HKCR/NoahXt.lzh
4c90: 2f 53 68 65 6c 6c 2f 4f 70 65 6e 2f 43 6f 6d 6d  /Shell/Open/Comm
4ca0: 61 6e 64 22 20 3d 20 22 2e 2e 2e 4e 6f 61 68 2e  and" = "...Noah.
4cb0: 65 78 65 20 2d 78 20 22 25 31 22 22 0d 0a 09 09  exe -x "%1""....
4cc0: 09 09 09 6b 65 79 34 2e 73 65 74 28 20 22 22 2c  ...key4.set( "",
4cd0: 20 67 5f 73 7a 41 73 43 6d 64 20 29 3b 0d 0a 09   g_szAsCmd );...
4ce0: 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 7d 0d  ..}....}...}..}.
4cf0: 0a 0d 0a 76 6f 69 64 20 61 73 73 6f 5f 6f 66 66  ...void asso_off
4d00: 28 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 65 78  ( const char* ex
4d10: 74 2c 20 63 6f 6e 73 74 20 69 6e 74 20 6e 6f 20  t, const int no 
4d20: 29 0d 0a 7b 0d 0a 09 69 66 28 20 21 69 73 5f 61  )..{...if( !is_a
4d30: 73 73 6f 5f 6f 6e 28 20 65 78 74 20 29 20 29 0d  sso_on( ext ) ).
4d40: 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 67 5f 62  ...return;...g_b
4d50: 43 68 61 6e 67 65 64 20 3d 20 74 72 75 65 3b 0d  Changed = true;.
4d60: 0a 0d 0a 09 2f 2f 2d 2d 20 64 65 6c 65 74 65 20  ....//-- delete 
4d70: 22 48 4b 43 52 2f 4e 6f 61 68 58 74 2e 6c 7a 68  "HKCR/NoahXt.lzh
4d80: 22 0d 0a 09 63 68 61 72 20 73 74 72 5b 32 30 5d  "...char str[20]
4d90: 20 3d 20 22 4e 6f 61 68 58 74 2e 22 3b 0d 0a 09   = "NoahXt.";...
4da0: 3a 3a 6c 73 74 72 63 70 79 28 20 73 74 72 2b 37  ::lstrcpy( str+7
4db0: 2c 20 65 78 74 20 29 3b 0d 0a 09 6b 69 52 65 67  , ext );...kiReg
4dc0: 4b 65 79 3a 3a 64 65 6c 53 75 62 4b 65 79 28 20  Key::delSubKey( 
4dd0: 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f  HKEY_CLASSES_ROO
4de0: 54 2c 20 73 74 72 20 29 3b 0d 0a 0d 0a 09 2f 2f  T, str );.....//
4df0: 2d 2d 20 64 65 6c 65 74 65 20 22 48 4b 43 52 2f  -- delete "HKCR/
4e00: 2e 6c 7a 68 22 20 22 48 4b 43 52 2f 2e 6c 7a 73  .lzh" "HKCR/.lzs
4e10: 22 20 2e 2e 2e 0d 0a 09 66 6f 72 28 20 63 6f 6e  " ......for( con
4e20: 73 74 20 63 68 61 72 2a 20 70 3d 65 78 74 3b 20  st char* p=ext; 
4e30: 2a 70 3b 20 73 74 65 70 28 70 29 20 29 0d 0a 09  *p; step(p) )...
4e40: 7b 0d 0a 09 09 73 74 72 5b 30 5d 3d 27 2e 27 2c  {....str[0]='.',
4e50: 20 3a 3a 6c 73 74 72 63 70 79 28 20 73 74 72 2b   ::lstrcpy( str+
4e60: 31 2c 20 70 20 29 3b 0d 0a 09 09 6b 69 52 65 67  1, p );....kiReg
4e70: 4b 65 79 3a 3a 64 65 6c 53 75 62 4b 65 79 28 20  Key::delSubKey( 
4e80: 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f  HKEY_CLASSES_ROO
4e90: 54 2c 20 73 74 72 20 29 3b 0d 0a 09 7d 0d 0a 0d  T, str );...}...
4ea0: 0a 09 73 77 69 74 63 68 28 20 6e 6f 20 29 0d 0a  ..switch( no )..
4eb0: 09 7b 0d 0a 09 2f 2f 20 43 41 42 2c 20 5a 49 50  .{...// CAB, ZIP
4ec0: 20 74 6f 20 57 69 6e 64 6f 77 73 20 44 65 66 61   to Windows Defa
4ed0: 75 6c 74 20 41 73 73 6f 63 69 61 74 69 6f 6e 0d  ult Association.
4ee0: 0a 09 63 61 73 65 20 43 41 42 3a 20 72 65 63 6f  ..case CAB: reco
4ef0: 76 65 72 5f 63 61 62 28 29 3b 20 62 72 65 61 6b  ver_cab(); break
4f00: 3b 0d 0a 09 63 61 73 65 20 5a 49 50 3a 20 72 65  ;...case ZIP: re
4f10: 63 6f 76 65 72 5f 7a 69 70 28 29 3b 20 62 72 65  cover_zip(); bre
4f20: 61 6b 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 62 6f  ak;...}..}....bo
4f30: 6f 6c 20 69 73 5f 61 73 73 6f 5f 6f 6e 28 20 63  ol is_asso_on( c
4f40: 6f 6e 73 74 20 63 68 61 72 2a 20 65 78 74 20 29  onst char* ext )
4f50: 0d 0a 7b 0d 0a 09 2f 2f 2d 2d 20 22 48 4b 43 52  ..{...//-- "HKCR
4f60: 2f 2e 6c 7a 68 22 20 65 78 69 73 74 73 20 3f 0d  /.lzh" exists ?.
4f70: 0a 09 63 68 61 72 20 73 74 72 5b 32 30 5d 20 3d  ..char str[20] =
4f80: 20 22 2e 22 3b 0d 0a 09 3a 3a 6c 73 74 72 63 70   ".";...::lstrcp
4f90: 79 28 20 73 74 72 2b 31 2c 20 65 78 74 20 29 3b  y( str+1, ext );
4fa0: 0d 0a 09 6b 69 52 65 67 4b 65 79 20 6b 65 79 3b  ...kiRegKey key;
4fb0: 0d 0a 09 69 66 28 20 21 6b 65 79 2e 6f 70 65 6e  ...if( !key.open
4fc0: 28 20 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52  ( HKEY_CLASSES_R
4fd0: 4f 4f 54 2c 20 73 74 72 2c 20 4b 45 59 5f 52 45  OOT, str, KEY_RE
4fe0: 41 44 20 29 20 29 0d 0a 09 09 72 65 74 75 72 6e  AD ) )....return
4ff0: 20 66 61 6c 73 65 3b 0d 0a 09 69 66 28 20 21 6b   false;...if( !k
5000: 65 79 2e 67 65 74 28 20 22 22 2c 20 73 74 72 2c  ey.get( "", str,
5010: 20 32 30 20 29 20 29 0d 0a 09 09 72 65 74 75 72   20 ) )....retur
5020: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 09 2f 2f 2d  n false;.....//-
5030: 2d 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 22  - the value of "
5040: 48 4b 43 52 2f 2e 6c 7a 68 22 20 69 73 20 22 4e  HKCR/.lzh" is "N
5050: 6f 61 68 58 74 2e 6c 7a 68 22 20 3f 0d 0a 09 63  oahXt.lzh" ?...c
5060: 68 61 72 20 61 73 63 5b 32 30 5d 20 3d 20 22 4e  har asc[20] = "N
5070: 6f 61 68 58 74 2e 22 3b 0d 0a 09 3a 3a 6c 73 74  oahXt.";...::lst
5080: 72 63 70 79 28 20 61 73 63 2b 37 2c 20 65 78 74  rcpy( asc+7, ext
5090: 20 29 3b 0d 0a 09 72 65 74 75 72 6e 20 28 20 30   );...return ( 0
50a0: 3d 3d 3a 3a 6c 73 74 72 63 6d 70 28 20 73 74 72  ==::lstrcmp( str
50b0: 2c 20 61 73 63 20 29 20 29 3b 0d 0a 7d 0d 0a     , asc ) );..}..