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
intshcut.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 9k
Category:
Windows Kernel
Development Platform:
Visual C++
- /*
- * intshcut.cpp - IUnknown implementation for InternetShortcut class.
- */
- /* Headers
- **********/
- #include "project.hpp"
- #pragma hdrstop
- #include "assoc.h"
- #include "clsfact.h"
- /* Global Constants
- *******************/
- #pragma data_seg(DATA_SEG_READ_ONLY)
- PUBLIC_DATA const int g_nDefaultShowCmd = SW_NORMAL;
- #pragma data_seg()
- /****************************** Public Functions *****************************/
- PUBLIC_CODE HRESULT IsProtocolRegistered(PCSTR pcszProtocol)
- {
- HRESULT hr;
- PSTR pszKey;
- ASSERT(IS_VALID_STRING_PTR(pcszProtocol, CSTR));
- hr = GetProtocolKey(pcszProtocol, EMPTY_STRING, &pszKey);
- if (hr == S_OK)
- {
- hr = (GetRegKeyValue(g_hkeyURLProtocols, pszKey, g_cszURLProtocol, NULL,
- NULL, NULL) == ERROR_SUCCESS)
- ? S_OK
- : URL_E_UNREGISTERED_PROTOCOL;
- delete pszKey;
- pszKey = NULL;
- }
- if (hr != S_OK) {
- TRACE_OUT(("IsProtocolRegistered(): Protocol "%s" is not registered.",
- pcszProtocol));
- }
- return(hr);
- }
- PUBLIC_CODE HRESULT ValidateURL(PCSTR pcszURL)
- {
- HRESULT hr;
- PSTR pszProtocol;
- ASSERT(IS_VALID_STRING_PTR(pcszURL, CSTR));
- hr = CopyURLProtocol(pcszURL, &pszProtocol);
- if (hr == S_OK)
- {
- hr = IsProtocolRegistered(pszProtocol);
- delete pszProtocol;
- pszProtocol = NULL;
- }
- return(hr);
- }
- PUBLIC_CODE HRESULT ValidateWorkingDirectory(PCSTR pcszWorkingDirectory)
- {
- ASSERT(IS_VALID_STRING_PTR(pcszWorkingDirectory, CSTR));
- return(IsPathDirectory(pcszWorkingDirectory) ? S_OK : E_PATH_NOT_FOUND);
- }
- #ifdef DEBUG
- PUBLIC_CODE BOOL IsValidPCInternetShortcut(PCInternetShortcut pcintshcut)
- {
- return(IS_VALID_READ_PTR(pcintshcut, CInternetShortcut) &&
- FLAGS_ARE_VALID(pcintshcut->m_dwFlags, ALL_INTSHCUT_FLAGS) &&
- (! pcintshcut->m_pszFile ||
- IS_VALID_STRING_PTR(pcintshcut->m_pszFile, STR)) &&
- (! pcintshcut->m_pszURL ||
- IS_VALID_STRING_PTR(pcintshcut->m_pszURL, STR)) &&
- ((! pcintshcut->m_pszIconFile &&
- ! pcintshcut->m_niIcon) ||
- EVAL(IsValidIconIndex(S_OK, pcintshcut->m_pszIconFile, MAX_PATH_LEN, pcintshcut->m_niIcon))) &&
- (! pcintshcut->m_pszWorkingDirectory ||
- EVAL(IsFullPath(pcintshcut->m_pszWorkingDirectory))) &&
- EVAL(IsValidShowCmd(pcintshcut->m_nShowCmd)) &&
- EVAL(! pcintshcut->m_pszFolder ||
- IsValidPath(pcintshcut->m_pszFolder)) &&
- EVAL(! pcintshcut->m_wHotkey ||
- IsValidHotkey(pcintshcut->m_wHotkey)) &&
- IS_VALID_STRUCT_PTR((PCRefCount)pcintshcut, CRefCount) &&
- IS_VALID_INTERFACE_PTR((PCIDataObject)pcintshcut, IDataObject) &&
- IS_VALID_INTERFACE_PTR((PCIExtractIcon)pcintshcut, IExtractIcon) &&
- IS_VALID_INTERFACE_PTR((PCINewShortcutHook)pcintshcut, INewShortcutHook) &&
- IS_VALID_INTERFACE_PTR((PCIPersistFile)pcintshcut, IPersistFile) &&
- IS_VALID_INTERFACE_PTR((PCIPersistStream)pcintshcut, IPersistStream) &&
- IS_VALID_INTERFACE_PTR((PCIShellExecuteHook)pcintshcut, IShellExecuteHook) &&
- IS_VALID_INTERFACE_PTR((PCIShellExtInit)pcintshcut, IShellExtInit) &&
- IS_VALID_INTERFACE_PTR((PCIShellLink)pcintshcut, IShellLink) &&
- IS_VALID_INTERFACE_PTR((PCIShellPropSheetExt)pcintshcut, IShellPropSheetExt) &&
- IS_VALID_INTERFACE_PTR((PCIUniformResourceLocator)pcintshcut, IUniformResourceLocator));
- }
- #endif
- /********************************** Methods **********************************/
- #pragma warning(disable:4705) /* "statement has no effect" warning - cl bug, see KB Q98989 */
- InternetShortcut::InternetShortcut()
- {
- DebugEntry(InternetShortcut::InternetShortcut);
- // Don't validate this until after construction.
- m_dwFlags = 0;
- m_pszFile = NULL;
- m_pszURL = NULL;
- m_pszIconFile = NULL;
- m_niIcon = 0;
- m_pszWorkingDirectory = NULL;
- m_nShowCmd = g_nDefaultShowCmd;
- m_pszFolder = NULL;
- m_wHotkey = 0;
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- DebugExitVOID(InternetShortcut::InternetShortcut);
- return;
- }
- #pragma warning(default:4705) /* "statement has no effect" warning - cl bug, see KB Q98989 */
- InternetShortcut::~InternetShortcut(void)
- {
- DebugEntry(InternetShortcut::~InternetShortcut);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- if (m_pszFile)
- {
- delete m_pszFile;
- m_pszFile = NULL;
- }
- if (m_pszURL)
- {
- delete m_pszURL;
- m_pszURL = NULL;
- }
- if (m_pszIconFile)
- {
- delete m_pszIconFile;
- m_pszIconFile = NULL;
- m_niIcon = 0;
- }
- if (m_pszWorkingDirectory)
- {
- delete m_pszWorkingDirectory;
- m_pszWorkingDirectory = NULL;
- }
- if (m_pszFolder)
- {
- delete m_pszFolder;
- m_pszFolder = NULL;
- }
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- DebugExitVOID(InternetShortcut::~InternetShortcut);
- return;
- }
- ULONG STDMETHODCALLTYPE InternetShortcut::AddRef(void)
- {
- ULONG ulcRef;
- DebugEntry(InternetShortcut::AddRef);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ulcRef = RefCount::AddRef();
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- DebugExitULONG(InternetShortcut::AddRef, ulcRef);
- return(ulcRef);
- }
- ULONG STDMETHODCALLTYPE InternetShortcut::Release(void)
- {
- ULONG ulcRef;
- DebugEntry(InternetShortcut::Release);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ulcRef = RefCount::Release();
- DebugExitULONG(InternetShortcut::Release, ulcRef);
- return(ulcRef);
- }
- HRESULT STDMETHODCALLTYPE InternetShortcut::QueryInterface(REFIID riid,
- PVOID *ppvObject)
- {
- HRESULT hr = S_OK;
- DebugEntry(InternetShortcut::QueryInterface);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT(IsValidREFIID(riid));
- ASSERT(IS_VALID_WRITE_PTR(ppvObject, PVOID));
- if (riid == IID_IDataObject)
- {
- *ppvObject = (PIDataObject)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IDataObject."));
- }
- else if (riid == IID_IExtractIcon)
- {
- *ppvObject = (PIExtractIcon)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IExtractIcon."));
- }
- else if (riid == IID_INewShortcutHook)
- {
- *ppvObject = (PINewShortcutHook)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning INewShortcutHook."));
- }
- else if (riid == IID_IPersist)
- {
- *ppvObject = (PIPersist)(PIPersistStream)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IPersist."));
- }
- else if (riid == IID_IPersistFile)
- {
- *ppvObject = (PIPersistFile)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IPersistFile."));
- }
- else if (riid == IID_IPersistStream)
- {
- *ppvObject = (PIPersistStream)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IPersistStream."));
- }
- else if (riid == IID_IShellExecuteHook)
- {
- *ppvObject = (PIShellExecuteHook)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IShellExecuteHook."));
- }
- else if (riid == IID_IShellExtInit)
- {
- *ppvObject = (PIShellExtInit)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IShellExtInit."));
- }
- else if (riid == IID_IShellLink)
- {
- *ppvObject = (PIShellLink)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IShellLink."));
- }
- else if (riid == IID_IShellPropSheetExt)
- {
- *ppvObject = (PIShellPropSheetExt)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IShellPropSheetExt."));
- }
- else if (riid == IID_IUniformResourceLocator)
- {
- *ppvObject = (PIUniformResourceLocator)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IUniformResourceLocator."));
- }
- else if (riid == IID_IUnknown)
- {
- *ppvObject = (PIUnknown)(PIUniformResourceLocator)this;
- TRACE_OUT(("InternetShortcut::QueryInterface(): Returning IUnknown."));
- }
- else
- {
- TRACE_OUT(("InternetShortcut::QueryInterface(): Called on unknown interface."));
- *ppvObject = NULL;
- hr = E_NOINTERFACE;
- }
- if (hr == S_OK)
- AddRef();
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- DebugExitHRESULT(InternetShortcut::QueryInterface, hr);
- return(hr);
- }
- extern "C"
- STDAPI CreateInstance_Intshcut(IUnknown *punkOuter, REFIID riid, void **ppvOut)
- {
- HRESULT hres;
- *ppvOut = NULL;
- if (punkOuter)
- return CLASS_E_NOAGGREGATION;
- InternetShortcut *pintshcut = new(InternetShortcut);
- if (pintshcut)
- {
- hres = pintshcut->QueryInterface(riid, ppvOut);
- pintshcut->Release();
- }
- else
- hres = E_OUTOFMEMORY;
- return hres;
- }