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
newshk.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++
- /*
- * newshk.cpp - INewShortcutHook implementation for URL class.
- */
- /* Headers
- **********/
- #include "project.hpp"
- #pragma hdrstop
- #include "resource.h"
- #include <mluisupp.h>
- extern "C"{
- extern BOOL lPathYetAnotherMakeUniqueNameA(LPSTR,LPCSTR,LPCSTR,LPCSTR);
- }
- /********************************** Methods **********************************/
- #pragma warning(disable:4100) /* "unreferenced formal parameter" warning */
- HRESULT STDMETHODCALLTYPE InternetShortcut::SetReferent(PCSTR pcszReferent,
- HWND hwndParent)
- {
- HRESULT hr;
- PSTR pszTranslatedURL;
- DebugEntry(InternetShortcut::SetReferent);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT(IS_VALID_STRING_PTR(pcszReferent, CSTR));
- ASSERT(IS_VALID_HANDLE(hwndParent, WND));
- hr = TranslateURL(pcszReferent, TRANSLATEURL_FL_GUESS_PROTOCOL,
- &pszTranslatedURL);
- if (SUCCEEDED(hr))
- {
- PCSTR pcszURLToUse;
- pcszURLToUse = (hr == S_OK) ? pszTranslatedURL : pcszReferent;
- hr = ValidateURL(pcszURLToUse);
- if (hr == S_OK)
- hr = SetURL(pcszURLToUse, 0);
- if (pszTranslatedURL)
- {
- LocalFree(pszTranslatedURL);
- pszTranslatedURL = NULL;
- }
- }
- if (hr == S_OK)
- TRACE_OUT(("InternetShortcut::SetReferent(): Set referent %s as URL %s.",
- pcszReferent,
- m_pszURL));
- else
- {
- ASSERT(FAILED(hr));
- switch (hr)
- {
- case URL_E_INVALID_SYNTAX:
- case URL_E_UNREGISTERED_PROTOCOL:
- hr = S_FALSE;
- break;
- default:
- break;
- }
- TRACE_OUT(("InternetShortcut::SetReferent(): Failed to set referent to %s.",
- pcszReferent));
- }
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- DebugExitHRESULT(InternetShortcut::SetReferent, hr);
- return(hr);
- }
- #pragma warning(default:4100) /* "unreferenced formal parameter" warning */
- HRESULT STDMETHODCALLTYPE InternetShortcut::GetReferent(PSTR pszReferent,
- int ncReferentBufLen)
- {
- HRESULT hr;
- DebugEntry(InternetShortcut::GetReferent);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT(IS_VALID_WRITE_BUFFER_PTR(pszReferent, STR, ncReferentBufLen));
- if (m_pszURL)
- {
- if (lstrlen(m_pszURL) < ncReferentBufLen)
- {
- lstrcpy(pszReferent, m_pszURL);
- hr = S_OK;
- TRACE_OUT(("InternetShortcut::GetReferent(): Returning referent %s.",
- pszReferent));
- }
- else
- hr = E_FAIL;
- }
- else
- hr = S_FALSE;
- if (hr != S_OK)
- {
- if (ncReferentBufLen > 0)
- *pszReferent = '';
- }
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT((hr == S_OK &&
- IS_VALID_STRING_PTR(pszReferent, STR) &&
- EVAL(lstrlen(pszReferent) < ncReferentBufLen)) ||
- ((hr == S_FALSE ||
- hr == E_FAIL) &&
- EVAL(! ncReferentBufLen ||
- ! *pszReferent)));
- DebugExitHRESULT(InternetShortcut::GetReferent, hr);
- return(hr);
- }
- HRESULT STDMETHODCALLTYPE InternetShortcut::SetFolder(PCSTR pcszFolder)
- {
- HRESULT hr;
- PSTR pszFolderCopy;
- DebugEntry(InternetShortcut::SetFolder);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT(IsPathDirectory(pcszFolder));
- // (+ 1) for null terminator.
- pszFolderCopy = new(char[lstrlen(pcszFolder) + 1]);
- if (pszFolderCopy)
- {
- lstrcpy(pszFolderCopy, pcszFolder);
- if (m_pszFolder)
- delete m_pszFolder;
- m_pszFolder = pszFolderCopy;
- hr = S_OK;
- TRACE_OUT(("InternetShortcut::SetFolder(): Set folder to %s.",
- m_pszFolder));
- }
- else
- hr = E_OUTOFMEMORY;
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- DebugExitHRESULT(InternetShortcut::SetFolder, hr);
- return(hr);
- }
- HRESULT STDMETHODCALLTYPE InternetShortcut::GetFolder(PSTR pszFolder,
- int ncFolderBufLen)
- {
- HRESULT hr;
- DebugEntry(InternetShortcut::GetFolder);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT(IS_VALID_WRITE_BUFFER_PTR(pszFolder, STR, ncFolderBufLen));
- if (m_pszFolder)
- {
- if (lstrlen(m_pszFolder) < ncFolderBufLen)
- {
- lstrcpy(pszFolder, m_pszFolder);
- hr = S_OK;
- TRACE_OUT(("InternetShortcut::GetFolder(): Returning folder %s.",
- pszFolder));
- }
- else
- hr = E_FAIL;
- }
- else
- hr = S_FALSE;
- if (hr != S_OK)
- {
- if (ncFolderBufLen > 0)
- *pszFolder = '';
- }
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT((hr == S_OK &&
- IS_VALID_STRING_PTR(pszFolder, STR) &&
- EVAL(lstrlen(pszFolder) < ncFolderBufLen)) ||
- ((hr == S_FALSE ||
- hr == E_FAIL) &&
- EVAL(! ncFolderBufLen ||
- ! *pszFolder)));
- DebugExitHRESULT(InternetShortcut::GetFolder, hr);
- return(hr);
- }
- HRESULT STDMETHODCALLTYPE InternetShortcut::GetName(PSTR pszName,
- int ncNameBufLen)
- {
- HRESULT hr = E_FAIL;
- char rgchShortName[MAX_PATH_LEN];
- DebugEntry(InternetShortcut::GetName);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT(IS_VALID_WRITE_BUFFER_PTR(pszName, STR, ncNameBufLen));
- hr = E_FAIL;
- if (MLLoadStringA(IDS_SHORT_NEW_INTERNET_SHORTCUT,
- rgchShortName, sizeof(rgchShortName)))
- {
- char rgchLongName[MAX_PATH_LEN];
- if (MLLoadStringA(IDS_NEW_INTERNET_SHORTCUT,
- rgchLongName, sizeof(rgchLongName)))
- {
- char rgchCurDir[MAX_PATH_LEN];
- PCSTR pcszFolderToUse;
- // Use current directory if m_pszFolder has not been set.
- pcszFolderToUse = m_pszFolder;
- if (! pcszFolderToUse)
- {
- if (GetCurrentDirectory(sizeof(rgchCurDir), rgchCurDir) > 0)
- pcszFolderToUse = rgchCurDir;
- }
- if (pcszFolderToUse)
- {
- char rgchUniqueName[MAX_PATH_LEN];
- if (lPathYetAnotherMakeUniqueNameA(rgchUniqueName, pcszFolderToUse,
- rgchShortName, rgchLongName))
- {
- PSTR pszFileName;
- PSTR pszRemoveExt;
- pszFileName = (PSTR)ExtractFileName(rgchUniqueName);
- pszRemoveExt = (PSTR)ExtractExtension(pszFileName);
- *pszRemoveExt = '';
- if (lstrlen(pszFileName) < ncNameBufLen)
- {
- lstrcpy(pszName, pszFileName);
- hr = S_OK;
- }
- }
- }
- }
- }
- if (hr == S_OK) {
- TRACE_OUT(("InternetShortcut::GetName(): Returning %s.",
- pszName));
- }
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT((hr == S_OK &&
- IS_VALID_STRING_PTR(pszName, STR) &&
- EVAL(lstrlen(pszName) < ncNameBufLen)) ||
- (hr == E_FAIL &&
- (! ncNameBufLen ||
- ! *pszName)));
- DebugExitHRESULT(InternetShortcut::GetName, hr);
- return(hr);
- }
- HRESULT STDMETHODCALLTYPE InternetShortcut::GetExtension(PSTR pszExtension,
- int ncExtensionBufLen)
- {
- HRESULT hr;
- DebugEntry(InternetShortcut::GetExtension);
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT(IS_VALID_WRITE_BUFFER_PTR(pszExtension, STR, ncExtensionBufLen));
- if (lstrlen(g_cszURLExt) < ncExtensionBufLen)
- {
- lstrcpy(pszExtension, g_cszURLExt);
- hr = S_OK;
- TRACE_OUT(("InternetShortcut::GetExtension(): Returning extension %s.",
- pszExtension));
- }
- else
- {
- if (ncExtensionBufLen > 0)
- *pszExtension = '';
- hr = E_FAIL;
- }
- ASSERT(IS_VALID_STRUCT_PTR(this, CInternetShortcut));
- ASSERT((hr == S_OK &&
- IS_VALID_STRING_PTR(pszExtension, STR) &&
- EVAL(lstrlen(pszExtension) < ncExtensionBufLen)) ||
- (hr == E_FAIL &&
- EVAL(! ncExtensionBufLen ||
- ! *pszExtension)));
- DebugExitHRESULT(InternetShortcut::GetExtension, hr);
- return(hr);
- }