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 ) );..}..