Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
util.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 4k
Category:
Windows Kernel
Development Platform:
Visual C++
- #include "stdafx.h"
- #include "resource.h"
- #include "initguid.h"
- #include "util.h"
- //=--------------------------------------------------------------------------=
- // miscellaneous [useful] numerical constants
- //=--------------------------------------------------------------------------=
- // the length of a guid once printed out with -'s, leading and trailing bracket,
- // plus 1 for NULL
- //
- #define GUID_STR_LEN 40
- HANDLE g_hHeap;
- //=--------------------------------------------------------------------------=
- // DeleteKeyAndSubKeys
- //=--------------------------------------------------------------------------=
- // delete's a key and all of it's subkeys.
- //
- // Parameters:
- // HKEY - [in] delete the descendant specified
- // LPSTR - [in] i'm the descendant specified
- //
- // Output:
- // BOOL - TRUE OK, FALSE baaaad.
- //
- // Notes:
- // - I don't feel too bad about implementing this recursively, since the
- // depth isn't likely to get all the great.
- // - RegDeleteKey() works recursivly on Win9x, but not NT
- //
- BOOL DeleteKeyAndSubKeys
- (
- HKEY hkIn,
- LPSTR pszSubKey
- )
- {
- HKEY hk;
- TCHAR szTmp[MAX_PATH];
- DWORD dwTmpSize;
- long l;
- BOOL f;
- int x;
- l = RegOpenKeyEx(hkIn, pszSubKey, 0, KEY_ALL_ACCESS, &hk);
- if (l != ERROR_SUCCESS) return FALSE;
- // loop through all subkeys, blowing them away.
- //
- f = TRUE;
- x = 0;
- while (f) {
- dwTmpSize = MAX_PATH;
- l = RegEnumKeyEx(hk, x, szTmp, &dwTmpSize, 0, NULL, NULL, NULL);
- if (l != ERROR_SUCCESS) break;
- f = DeleteKeyAndSubKeys(hk, szTmp);
- x++;
- }
- // there are no subkeys left, [or we'll just generate an error and return FALSE].
- // let's go blow this dude away.
- //
- RegCloseKey(hk);
- l = RegDeleteKey(hkIn, pszSubKey);
- return (l == ERROR_SUCCESS) ? TRUE : FALSE;
- }
- //=--------------------------------------------------------------------------=
- // StringFromGuid
- //=--------------------------------------------------------------------------=
- // returns an ANSI string from a CLSID or GUID
- //
- // Parameters:
- // REFIID - [in] clsid to make string out of.
- // LPSTR - [in] buffer in which to place resultant GUID.
- //
- // Output:
- // int - number of chars written out.
- //
- // Notes:
- //
- int StringFromGuid
- (
- const CLSID* piid,
- LPTSTR pszBuf
- )
- {
- return wsprintf(pszBuf, TEXT("{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"), piid->Data1,
- piid->Data2, piid->Data3, piid->Data4[0], piid->Data4[1], piid->Data4[2],
- piid->Data4[3], piid->Data4[4], piid->Data4[5], piid->Data4[6], piid->Data4[7]);
- }
- // Copy WideStr to another on Win95
- void CopyWideStr(LPWSTR pwszTarget, LPWSTR pwszSource)
- {
- while(*pwszSource != 0)
- {
- *pwszTarget = *pwszSource;
- pwszSource++;
- pwszTarget++;
- }
- *pwszTarget = 0;
- }
- //=--------------------------------------------------------------------------=
- // MakeWideFromAnsi
- //=--------------------------------------------------------------------------=
- // given a string, make a BSTR out of it.
- //
- // Parameters:
- // LPSTR - [in]
- // BYTE - [in]
- //
- // Output:
- // LPWSTR - needs to be cast to final desired result
- //
- // Notes:
- //
- LPWSTR MakeWideStrFromAnsi(LPSTR psz)
- {
- LPWSTR pwsz;
- int i;
- // arg checking.
- //
- if (!psz) return NULL;
- // compute the length of the required BSTR
- //
- if ((i = MultiByteToWideChar(CP_ACP, 0, psz, -1, NULL, 0)) <= 0)
- return NULL;
- // allocate the widestr, +1 for terminating null
- //
- pwsz = (LPWSTR) CoTaskMemAlloc(i * sizeof(WCHAR));
- if (!pwsz) return NULL;
- MultiByteToWideChar(CP_ACP, 0, psz, -1, pwsz, i);
- pwsz[i - 1] = 0;
- return pwsz;
- }
- LPSTR MakeAnsiStrFromWide(LPWSTR pwsz)
- {
- LPSTR psz;
- int i;
- // arg checking.
- //
- if (!pwsz)
- return NULL;
- // compute the length of the required BSTR
- //
- if ((i = WideCharToMultiByte(CP_ACP, 0, pwsz, -1, NULL, 0, NULL, NULL)) <= 0)
- return NULL;
- // allocate the ansistr, +1 for terminating null
- //
- psz = (LPSTR) CoTaskMemAlloc(i * sizeof(CHAR));
- if (!psz) return NULL;
- WideCharToMultiByte(CP_ACP, 0, pwsz, -1, psz, i, NULL, NULL);
- psz[i - 1] = 0;
- return psz;
- }