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
mime.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 13k
Category:
Windows Kernel
Development Platform:
Visual C++
- //
- // Mime stuff used by shell32/shdocvw/shdoc401
- //
- #include "priv.h"
- #define TF_MIME 0
- /*----------------------------------------------------------
- Purpose: Generates the HKEY_CLASSES_ROOT subkey for a MIME
- type
- Returns:
- Cond: --
- */
- STDAPI_(BOOL) GetMIMETypeSubKeyA(LPCSTR pcszMIMEType, LPSTR pszSubKeyBuf, UINT cchBuf)
- {
- BOOL bResult;
- bResult = ((UINT)lstrlenA(TEXT("MIME\Database\Content Type\%s")) +
- (UINT)lstrlenA(pcszMIMEType) < cchBuf);
- if (bResult)
- EVAL((UINT)wsprintfA(pszSubKeyBuf, TEXT("MIME\Database\Content Type\%s"),
- pcszMIMEType) < cchBuf);
- else
- {
- if (cchBuf > 0)
- *pszSubKeyBuf = '';
- TraceMsg(TF_WARNING, "GetMIMETypeSubKey(): Given sub key buffer of length %u is too short to hold sub key for MIME type %hs.",
- cchBuf, pcszMIMEType);
- }
- ASSERT(! cchBuf ||
- (IS_VALID_STRING_PTRA(pszSubKeyBuf, -1) &&
- (UINT)lstrlenA(pszSubKeyBuf) < cchBuf));
- ASSERT(bResult ||
- ! cchBuf ||
- ! *pszSubKeyBuf);
- return(bResult);
- }
- STDAPI_(BOOL) GetMIMETypeSubKeyW(LPCWSTR pszMIMEType, LPWSTR pszBuf, UINT cchBuf)
- {
- BOOL bRet;
- char szMIMEType[MAX_PATH];
- char sz[MAX_PATH];
- ASSERT(IS_VALID_STRING_PTRW(pszMIMEType, -1));
- WideCharToMultiByte(CP_ACP, 0, pszMIMEType, -1, szMIMEType, SIZECHARS(szMIMEType), NULL, NULL);
- bRet = GetMIMETypeSubKeyA(szMIMEType, sz, SIZECHARS(sz));
- if (bRet)
- {
- ASSERT(cchBuf <= SIZECHARS(sz));
- MultiByteToWideChar(CP_ACP, 0, sz, -1, pszBuf, cchBuf);
- }
- return bRet;
- }
- /*
- ** RegisterExtensionForMIMEType()
- **
- ** Under HKEY_CLASSES_ROOTMIMEDatabaseContent Typemime/type, add
- ** Content Type = mime/type and Extension = .ext.
- **
- */
- STDAPI_(BOOL) RegisterExtensionForMIMETypeA(LPCSTR pcszExtension, LPCSTR pcszMIMEContentType)
- {
- BOOL bResult;
- CHAR szMIMEContentTypeSubKey[MAX_PATH];
- ASSERT(IS_VALID_STRING_PTRA(pcszExtension, -1));
- ASSERT(IS_VALID_STRING_PTRA(pcszMIMEContentType, -1));
- ASSERT(IsValidExtensionA(pcszExtension));
- bResult = GetMIMETypeSubKeyA(pcszMIMEContentType, szMIMEContentTypeSubKey,
- SIZECHARS(szMIMEContentTypeSubKey));
- if (bResult)
- {
- /* (+ 1) for null terminator. */
- bResult = (NO_ERROR == SHSetValueA(HKEY_CLASSES_ROOT, szMIMEContentTypeSubKey,
- "Extension", REG_SZ, pcszExtension,
- CbFromCchA(lstrlenA(pcszExtension) + 1)));
- }
- return(bResult);
- }
- STDAPI_(BOOL) RegisterExtensionForMIMETypeW(LPCWSTR pcszExtension, LPCWSTR pcszMIMEContentType)
- {
- BOOL bResult;
- WCHAR szMIMEContentTypeSubKey[MAX_PATH];
- ASSERT(IS_VALID_STRING_PTRW(pcszExtension, -1));
- ASSERT(IS_VALID_STRING_PTRW(pcszMIMEContentType, -1));
- ASSERT(IsValidExtensionW(pcszExtension));
- bResult = GetMIMETypeSubKeyW(pcszMIMEContentType, szMIMEContentTypeSubKey,
- SIZECHARS(szMIMEContentTypeSubKey));
- if (bResult)
- {
- /* (+ 1) for null terminator. */
- bResult = (NO_ERROR == SHSetValueW(HKEY_CLASSES_ROOT, szMIMEContentTypeSubKey,
- TEXTW("Extension"), REG_SZ, pcszExtension,
- (lstrlenW(pcszExtension) + 1)*sizeof(WCHAR)));
- }
- return(bResult);
- }
- /*
- ** UnregisterExtensionForMIMEType()
- **
- ** Deletes Extension under
- ** HKEY_CLASSES_ROOTMIMEDatabaseContent Typemime/type. If no other values
- ** or sub keys are left, deletes
- ** HKEY_CLASSES_ROOTMIMEDatabaseContent Typemime/type.
- **
- ** Side Effects: May also delete MIME key.
- */
- STDAPI_(BOOL) UnregisterExtensionForMIMETypeA(LPCSTR pcszMIMEContentType)
- {
- BOOL bResult;
- CHAR szMIMEContentTypeSubKey[MAX_PATH];
- ASSERT(IS_VALID_STRING_PTRA(pcszMIMEContentType, -1));
- bResult = (GetMIMETypeSubKeyA(pcszMIMEContentType, szMIMEContentTypeSubKey,
- SIZECHARS(szMIMEContentTypeSubKey)) &&
- NO_ERROR == SHDeleteValueA(HKEY_CLASSES_ROOT, szMIMEContentTypeSubKey,
- "Extension") &&
- NO_ERROR == SHDeleteEmptyKeyA(HKEY_CLASSES_ROOT, szMIMEContentTypeSubKey));
- return(bResult);
- }
- STDAPI_(BOOL) UnregisterExtensionForMIMETypeW(LPCWSTR pcszMIMEContentType)
- {
- BOOL bResult;
- WCHAR szMIMEContentTypeSubKey[MAX_PATH];
- ASSERT(IS_VALID_STRING_PTRW(pcszMIMEContentType, -1));
- bResult = (GetMIMETypeSubKeyW(pcszMIMEContentType, szMIMEContentTypeSubKey,
- SIZECHARS(szMIMEContentTypeSubKey)) &&
- NO_ERROR == SHDeleteValueW(HKEY_CLASSES_ROOT, szMIMEContentTypeSubKey,
- TEXTW("Extension")) &&
- NO_ERROR == SHDeleteEmptyKeyW(HKEY_CLASSES_ROOT, szMIMEContentTypeSubKey));
- return(bResult);
- }
- /*
- ** UnregisterMIMETypeForExtension()
- **
- ** Deletes Content Type under HKEY_CLASSES_ROOT.ext.
- **
- ** Side Effects: none
- */
- STDAPI_(BOOL) UnregisterMIMETypeForExtensionA(LPCSTR pcszExtension)
- {
- ASSERT(IS_VALID_STRING_PTRA(pcszExtension, -1));
- ASSERT(IsValidExtensionA(pcszExtension));
- return NO_ERROR == SHDeleteValueA(HKEY_CLASSES_ROOT, pcszExtension, "Content Type");
- }
- STDAPI_(BOOL) UnregisterMIMETypeForExtensionW(LPCWSTR pcszExtension)
- {
- ASSERT(IS_VALID_STRING_PTRW(pcszExtension, -1));
- ASSERT(IsValidExtensionW(pcszExtension));
- return NO_ERROR == SHDeleteValueW(HKEY_CLASSES_ROOT, pcszExtension, TEXTW("Content Type"));
- }
- /*
- ** RegisterMIMETypeForExtension()
- **
- ** Under HKEY_CLASSES_ROOT.ext, add Content Type = mime/type.
- **
- ** Arguments:
- **
- ** Returns:
- **
- ** Side Effects: none
- */
- STDAPI_(BOOL) RegisterMIMETypeForExtensionA(LPCSTR pcszExtension, LPCSTR pcszMIMEContentType)
- {
- ASSERT(IS_VALID_STRING_PTRA(pcszExtension, -1));
- ASSERT(IS_VALID_STRING_PTRA(pcszMIMEContentType, -1));
- ASSERT(IsValidExtensionA(pcszExtension));
- /* (+ 1) for null terminator. */
- return NO_ERROR == SHSetValueA(HKEY_CLASSES_ROOT, pcszExtension, "Content Type",
- REG_SZ, pcszMIMEContentType,
- CbFromCchA(lstrlenA(pcszMIMEContentType) + 1));
- }
- STDAPI_(BOOL) RegisterMIMETypeForExtensionW(LPCWSTR pcszExtension, LPCWSTR pcszMIMEContentType)
- {
- ASSERT(IS_VALID_STRING_PTRW(pcszExtension, -1));
- ASSERT(IS_VALID_STRING_PTRW(pcszMIMEContentType, -1));
- ASSERT(IsValidExtensionW(pcszExtension));
- /* (+ 1) for null terminator. */
- return NO_ERROR == SHSetValueW(HKEY_CLASSES_ROOT, pcszExtension, TEXTW("Content Type"),
- REG_SZ, pcszMIMEContentType,
- (lstrlenW(pcszMIMEContentType) + 1) * sizeof(WCHAR));
- }
- /*
- ** GetMIMEValue()
- **
- ** Retrieves the data for a value of a MIME type.
- **
- ** Arguments:
- **
- ** Returns:
- **
- ** Side Effects: none
- */
- STDAPI_(BOOL) GetMIMEValueA(LPCSTR pcszMIMEType, LPCSTR pcszValue,
- PDWORD pdwValueType, PBYTE pbyteValueBuf,
- PDWORD pdwcbValueBufLen)
- {
- BOOL bResult;
- CHAR szMIMETypeSubKey[MAX_PATH];
- ASSERT(IS_VALID_STRING_PTRA(pcszMIMEType, -1));
- ASSERT(! pcszValue ||
- IS_VALID_STRING_PTRA(pcszValue, -1));
- ASSERT(IS_VALID_WRITE_PTR(pdwValueType, DWORD));
- ASSERT(IS_VALID_WRITE_BUFFER(pbyteValueBuf, BYTE, *pdwcbValueBufLen));
- bResult = (GetMIMETypeSubKeyA(pcszMIMEType, szMIMETypeSubKey,SIZECHARS(szMIMETypeSubKey)) &&
- NO_ERROR == SHGetValueA(HKEY_CLASSES_ROOT, szMIMETypeSubKey,
- pcszValue, pdwValueType, pbyteValueBuf,
- pdwcbValueBufLen));
- return(bResult);
- }
- STDAPI_(BOOL) GetMIMEValueW(LPCWSTR pcszMIMEType, LPCWSTR pcszValue,
- PDWORD pdwValueType, PBYTE pbyteValueBuf,
- PDWORD pdwcbValueBufLen)
- {
- BOOL bResult;
- WCHAR szMIMETypeSubKey[MAX_PATH];
- ASSERT(IS_VALID_STRING_PTRW(pcszMIMEType, -1));
- ASSERT(! pcszValue ||
- IS_VALID_STRING_PTRW(pcszValue, -1));
- ASSERT(IS_VALID_WRITE_PTR(pdwValueType, DWORD));
- ASSERT(IS_VALID_WRITE_BUFFER(pbyteValueBuf, BYTE, *pdwcbValueBufLen));
- bResult = (GetMIMETypeSubKeyW(pcszMIMEType, szMIMETypeSubKey,SIZECHARS(szMIMETypeSubKey)) &&
- NO_ERROR == SHGetValueW(HKEY_CLASSES_ROOT, szMIMETypeSubKey,
- pcszValue, pdwValueType, pbyteValueBuf,
- pdwcbValueBufLen));
- return(bResult);
- }
- /*
- ** GetMIMETypeStringValue()
- **
- ** Retrieves the string for a registered MIME type's value.
- **
- ** Arguments:
- **
- ** Returns:
- **
- ** Side Effects: none
- */
- STDAPI_(BOOL) GetMIMETypeStringValueA(LPCSTR pcszMIMEType, LPCSTR pcszValue,
- LPSTR pszBuf, UINT ucBufLen)
- {
- BOOL bResult;
- DWORD dwValueType;
- DWORD dwcbLen = CbFromCchA(ucBufLen);
- /* GetMIMEValue() will verify parameters. */
- bResult = (GetMIMEValueA(pcszMIMEType, pcszValue, &dwValueType, (PBYTE)pszBuf, &dwcbLen) &&
- dwValueType == REG_SZ);
- if (! bResult)
- {
- if (ucBufLen > 0)
- *pszBuf = '';
- }
- ASSERT(! ucBufLen || IS_VALID_STRING_PTRA(pszBuf, -1));
- return(bResult);
- }
- STDAPI_(BOOL) GetMIMETypeStringValueW(LPCWSTR pcszMIMEType, LPCWSTR pcszValue,
- LPWSTR pszBuf, UINT ucBufLen)
- {
- BOOL bResult;
- DWORD dwValueType;
- DWORD dwcbLen = CbFromCchW(ucBufLen);
- /* GetMIMEValue() will verify parameters. */
- bResult = (GetMIMEValueW(pcszMIMEType, pcszValue, &dwValueType, (PBYTE)pszBuf, &dwcbLen) &&
- dwValueType == REG_SZ);
- if (! bResult)
- {
- if (ucBufLen > 0)
- *pszBuf = '';
- }
- ASSERT(! ucBufLen || IS_VALID_STRING_PTRW(pszBuf, -1));
- return(bResult);
- }
- /*
- ** MIME_GetExtension()
- **
- ** Determines the file name extension to be used when writing a file of a MIME
- ** type to the file system.
- **
- ** Arguments:
- **
- ** Returns:
- **
- ** Side Effects: none
- */
- STDAPI_(BOOL) MIME_GetExtensionA(LPCSTR pcszMIMEType, LPSTR pszExtensionBuf, UINT ucExtensionBufLen)
- {
- BOOL bResult = FALSE;
- ASSERT(IS_VALID_STRING_PTRA(pcszMIMEType, -1));
- ASSERT(IS_VALID_WRITE_BUFFER(pszExtensionBuf, CHAR, ucExtensionBufLen));
- if (EVAL(ucExtensionBufLen > 2))
- {
- /* Leave room for possible leading period. */
- if (GetMIMETypeStringValueA(pcszMIMEType, "Extension", pszExtensionBuf + 1, ucExtensionBufLen - 1))
- {
- if (pszExtensionBuf[1])
- {
- /* Prepend period if necessary. */
- if (pszExtensionBuf[1] == TEXT('.'))
- /* (+ 1) for null terminator. */
- MoveMemory(pszExtensionBuf, pszExtensionBuf + 1,
- CbFromCchA(lstrlenA(pszExtensionBuf + 1) + 1));
- else
- pszExtensionBuf[0] = TEXT('.');
- bResult = TRUE;
- }
- }
- }
- if (! bResult)
- {
- if (ucExtensionBufLen > 0)
- *pszExtensionBuf = '';
- }
- if (bResult)
- TraceMsgA(TF_MIME, "MIME_GetExtension(): Extension %s registered as default extension for MIME type %s.",
- pszExtensionBuf, pcszMIMEType);
- ASSERT((bResult &&
- IsValidExtensionA(pszExtensionBuf)) ||
- (! bResult &&
- (! ucExtensionBufLen ||
- ! *pszExtensionBuf)));
- ASSERT(! ucExtensionBufLen ||
- (UINT)lstrlenA(pszExtensionBuf) < ucExtensionBufLen);
- return(bResult);
- }
- STDAPI_(BOOL) MIME_GetExtensionW(LPCWSTR pcszMIMEType, LPWSTR pszExtensionBuf, UINT ucExtensionBufLen)
- {
- BOOL bResult = FALSE;
- ASSERT(IS_VALID_STRING_PTRW(pcszMIMEType, -1));
- ASSERT(IS_VALID_WRITE_BUFFER(pszExtensionBuf, CHAR, ucExtensionBufLen));
- if (EVAL(ucExtensionBufLen > 2))
- {
- /* Leave room for possible leading period. */
- if (GetMIMETypeStringValueW(pcszMIMEType, TEXTW("Extension"), pszExtensionBuf + 1, ucExtensionBufLen - 1))
- {
- if (pszExtensionBuf[1])
- {
- /* Prepend period if necessary. */
- if (pszExtensionBuf[1] == TEXT('.'))
- /* (+ 1) for null terminator. */
- MoveMemory(pszExtensionBuf, pszExtensionBuf + 1,
- CbFromCchW(lstrlenW(pszExtensionBuf + 1) + 1));
- else
- pszExtensionBuf[0] = TEXT('.');
- bResult = TRUE;
- }
- }
- }
- if (! bResult)
- {
- if (ucExtensionBufLen > 0)
- *pszExtensionBuf = '';
- }
- if (bResult)
- TraceMsgW(TF_MIME, "MIME_GetExtension(): Extension %s registered as default extension for MIME type %s.",
- pszExtensionBuf, pcszMIMEType);
- ASSERT((bResult &&
- IsValidExtensionW(pszExtensionBuf)) ||
- (! bResult &&
- (! ucExtensionBufLen ||
- ! *pszExtensionBuf)));
- ASSERT(! ucExtensionBufLen ||
- (UINT)lstrlenW(pszExtensionBuf) < ucExtensionBufLen);
- return(bResult);
- }