Need to remove existing files before doing vendor import
[reactos.git] / reactos / lib / shlwapi / regstream.c
diff --git a/reactos/lib/shlwapi/regstream.c b/reactos/lib/shlwapi/regstream.c
deleted file mode 100644 (file)
index 614c70b..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- * SHLWAPI Registry Stream functions
- *
- * Copyright 1999 Juergen Schmied
- * Copyright 2002 Jon Griffiths
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include <stdarg.h>
-#include <string.h>
-
-#define COBJMACROS
-
-#include "winerror.h"
-#include "windef.h"
-#include "winbase.h"
-#include "objbase.h"
-#include "winreg.h"
-
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(shell);
-
-typedef struct
-{      IStreamVtbl *lpVtbl;
-       DWORD  ref;
-       HKEY   hKey;
-       LPBYTE pbBuffer;
-       DWORD  dwLength;
-       DWORD  dwPos;
-} ISHRegStream;
-
-/**************************************************************************
-*  IStream_fnQueryInterface
-*/
-static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, REFIID riid, LPVOID *ppvObj)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
-
-       *ppvObj = NULL;
-
-       if(IsEqualIID(riid, &IID_IUnknown))     /*IUnknown*/
-         *ppvObj = This;
-       else if(IsEqualIID(riid, &IID_IStream)) /*IStream*/
-         *ppvObj = This;
-
-       if(*ppvObj)
-       {
-         IStream_AddRef((IStream*)*ppvObj);
-         TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
-         return S_OK;
-       }
-       TRACE("-- Interface: E_NOINTERFACE\n");
-       return E_NOINTERFACE;
-}
-
-/**************************************************************************
-*  IStream_fnAddRef
-*/
-static ULONG WINAPI IStream_fnAddRef(IStream *iface)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)->(count=%lu)\n",This, This->ref);
-
-       return InterlockedIncrement(&This->ref);
-}
-
-/**************************************************************************
-*  IStream_fnRelease
-*/
-static ULONG WINAPI IStream_fnRelease(IStream *iface)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)->()\n",This);
-
-       if (!InterlockedDecrement(&This->ref))
-       {
-         TRACE(" destroying SHReg IStream (%p)\n",This);
-
-         if (This->pbBuffer)
-           HeapFree(GetProcessHeap(),0,This->pbBuffer);
-
-         if (This->hKey)
-           RegCloseKey(This->hKey);
-
-         HeapFree(GetProcessHeap(),0,This);
-         return 0;
-       }
-       return This->ref;
-}
-
-/**************************************************************************
- * IStream_fnRead
- */
-static HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG cb, ULONG* pcbRead)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       DWORD dwBytesToRead, dwBytesLeft;
-
-       TRACE("(%p)->(%p,0x%08lx,%p)\n",This, pv, cb, pcbRead);
-
-       if (!pv)
-         return STG_E_INVALIDPOINTER;
-
-       dwBytesLeft = This->dwLength - This->dwPos;
-
-       if ( 0 >= dwBytesLeft ) /* end of buffer */
-         return S_FALSE;
-
-       dwBytesToRead = ( cb > dwBytesLeft) ? dwBytesLeft : cb;
-
-       memmove ( pv, (This->pbBuffer) + (This->dwPos), dwBytesToRead);
-
-       This->dwPos += dwBytesToRead; /* adjust pointer */
-
-       if (pcbRead)
-         *pcbRead = dwBytesToRead;
-
-       return S_OK;
-}
-
-/**************************************************************************
- * IStream_fnWrite
- */
-static HRESULT WINAPI IStream_fnWrite (IStream * iface, const void* pv, ULONG cb, ULONG* pcbWritten)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-
-       if (pcbWritten)
-         *pcbWritten = 0;
-
-       return E_NOTIMPL;
-}
-
-/**************************************************************************
- *  IStream_fnSeek
- */
-static HRESULT WINAPI IStream_fnSeek (IStream * iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-
-       if (plibNewPosition)
-         plibNewPosition->QuadPart = 0;
-       return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IStream_fnSetSize
- */
-static HRESULT WINAPI IStream_fnSetSize (IStream * iface, ULARGE_INTEGER libNewSize)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-       return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IStream_fnCopyTo
- */
-static HRESULT WINAPI IStream_fnCopyTo (IStream * iface, IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-       if (pcbRead)
-         pcbRead->QuadPart = 0;
-       if (pcbWritten)
-         pcbWritten->QuadPart = 0;
-       return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IStream_fnCommit
- */
-static HRESULT WINAPI IStream_fnCommit (IStream * iface, DWORD grfCommitFlags)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-
-       return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IStream_fnRevert
- */
-static HRESULT WINAPI IStream_fnRevert (IStream * iface)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-
-       return E_NOTIMPL;
-}
-
-/**************************************************************************
- * IStream_fnLockUnlockRegion
- */
-static HRESULT WINAPI IStream_fnLockUnlockRegion (IStream * iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-
-       return E_NOTIMPL;
-}
-
-/*************************************************************************
- * IStream_fnStat
- */
-static HRESULT WINAPI IStream_fnStat (IStream * iface, STATSTG*   pstatstg, DWORD grfStatFlag)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-
-       return E_NOTIMPL;
-}
-
-/*************************************************************************
- * IStream_fnClone
- */
-static HRESULT WINAPI IStream_fnClone (IStream * iface, IStream** ppstm)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-
-       TRACE("(%p)\n",This);
-       if (ppstm)
-         *ppstm = NULL;
-       return E_NOTIMPL;
-}
-
-static struct IStreamVtbl rstvt =
-{
-       IStream_fnQueryInterface,
-       IStream_fnAddRef,
-       IStream_fnRelease,
-       IStream_fnRead,
-       IStream_fnWrite,
-       IStream_fnSeek,
-       IStream_fnSetSize,
-       IStream_fnCopyTo,
-       IStream_fnCommit,
-       IStream_fnRevert,
-       IStream_fnLockUnlockRegion,
-       IStream_fnLockUnlockRegion,
-       IStream_fnStat,
-       IStream_fnClone
-};
-
-/* Methods overridden by the dummy stream */
-
-/**************************************************************************
- *  IStream_fnAddRefDummy
- */
-static ULONG WINAPI IStream_fnAddRefDummy(IStream *iface)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-       TRACE("(%p)\n", This);
-       return 2;
-}
-
-/**************************************************************************
- *  IStream_fnReleaseDummy
- */
-static ULONG WINAPI IStream_fnReleaseDummy(IStream *iface)
-{
-       ISHRegStream *This = (ISHRegStream *)iface;
-       TRACE("(%p)\n", This);
-       return 1;
-}
-
-/**************************************************************************
- * IStream_fnReadDummy
- */
-static HRESULT WINAPI IStream_fnReadDummy(IStream *iface, LPVOID pv, ULONG cb, ULONG* pcbRead)
-{
-  if (pcbRead)
-    *pcbRead = 0;
-  return E_NOTIMPL;
-}
-
-static struct IStreamVtbl DummyRegStreamVTable =
-{
-  IStream_fnQueryInterface,
-  IStream_fnAddRefDummy,  /* Overridden */
-  IStream_fnReleaseDummy, /* Overridden */
-  IStream_fnReadDummy,    /* Overridden */
-  IStream_fnWrite,
-  IStream_fnSeek,
-  IStream_fnSetSize,
-  IStream_fnCopyTo,
-  IStream_fnCommit,
-  IStream_fnRevert,
-  IStream_fnLockUnlockRegion,
-  IStream_fnLockUnlockRegion,
-  IStream_fnStat,
-  IStream_fnClone
-};
-
-/* Dummy registry stream object */
-static ISHRegStream rsDummyRegStream =
-{
- &DummyRegStreamVTable,
- 1,
- NULL,
- NULL,
- 0,
- 0
-};
-
-/**************************************************************************
- * IStream_Create
- *
- * Internal helper: Create and initialise a new registry stream object.
- */
-static IStream *IStream_Create(HKEY hKey, LPBYTE pbBuffer, DWORD dwLength)
-{
- ISHRegStream* regStream;
-
- regStream = (ISHRegStream*)HeapAlloc(GetProcessHeap(), 0, sizeof(ISHRegStream));
-
- if (regStream)
- {
-   regStream->lpVtbl = &rstvt;
-   regStream->ref = 1;
-   regStream->hKey = hKey;
-   regStream->pbBuffer = pbBuffer;
-   regStream->dwLength = dwLength;
-   regStream->dwPos = 0;
- }
- TRACE ("Returning %p\n", regStream);
- return (IStream *)regStream;
-}
-
-/*************************************************************************
- * SHOpenRegStream2A   [SHLWAPI.@]
- *
- * Create a stream to read binary registry data.
- *
- * PARAMS
- * hKey      [I] Registry handle
- * pszSubkey [I] The sub key name
- * pszValue  [I] The value name under the sub key
- * dwMode    [I] Unused
- *
- * RETURNS
- * Success: An IStream interface referring to the registry data
- * Failure: NULL, if the registry key could not be opened or is not binary.
- */
-IStream * WINAPI SHOpenRegStream2A(HKEY hKey, LPCSTR pszSubkey,
-                                   LPCSTR pszValue,DWORD dwMode)
-{
-  HKEY hStrKey = NULL;
-  LPBYTE lpBuff = NULL;
-  DWORD dwLength, dwType;
-
-  TRACE("(%p,%s,%s,0x%08lx)\n", hKey, pszSubkey, pszValue, dwMode);
-
-  /* Open the key, read in binary data and create stream */
-  if (!RegOpenKeyExA (hKey, pszSubkey, 0, KEY_READ, &hStrKey) &&
-      !RegQueryValueExA (hStrKey, pszValue, 0, 0, 0, &dwLength) &&
-      (lpBuff = HeapAlloc (GetProcessHeap(), 0, dwLength)) &&
-      !RegQueryValueExA (hStrKey, pszValue, 0, &dwType, lpBuff, &dwLength) &&
-      dwType == REG_BINARY)
-    return IStream_Create(hStrKey, lpBuff, dwLength);
-
-  if (lpBuff)
-    HeapFree (GetProcessHeap(), 0, lpBuff);
-  if (hStrKey)
-    RegCloseKey(hStrKey);
-  return NULL;
-}
-
-/*************************************************************************
- * SHOpenRegStream2W   [SHLWAPI.@]
- *
- * See SHOpenRegStream2A.
- */
-IStream * WINAPI SHOpenRegStream2W(HKEY hKey, LPCWSTR pszSubkey,
-                                   LPCWSTR pszValue, DWORD dwMode)
-{
-  HKEY hStrKey = NULL;
-  LPBYTE lpBuff = NULL;
-  DWORD dwLength, dwType;
-
-  TRACE("(%p,%s,%s,0x%08lx)\n", hKey, debugstr_w(pszSubkey),
-        debugstr_w(pszValue), dwMode);
-
-  /* Open the key, read in binary data and create stream */
-  if (!RegOpenKeyExW (hKey, pszSubkey, 0, KEY_READ, &hStrKey) &&
-      !RegQueryValueExW (hStrKey, pszValue, 0, 0, 0, &dwLength) &&
-      (lpBuff = HeapAlloc (GetProcessHeap(), 0, dwLength)) &&
-      !RegQueryValueExW (hStrKey, pszValue, 0, &dwType, lpBuff, &dwLength) &&
-      dwType == REG_BINARY)
-    return IStream_Create(hStrKey, lpBuff, dwLength);
-
-  if (lpBuff)
-    HeapFree (GetProcessHeap(), 0, lpBuff);
-  if (hStrKey)
-    RegCloseKey(hStrKey);
-  return NULL;
-}
-
-/*************************************************************************
- * SHOpenRegStreamA     [SHLWAPI.@]
- *
- * Create a stream to read binary registry data.
- *
- * PARAMS
- * hKey      [I] Registry handle
- * pszSubkey [I] The sub key name
- * pszValue  [I] The value name under the sub key
- * dwMode    [I] STGM mode for opening the file
- *
- * RETURNS
- * Success: An IStream interface referring to the registry data
- * Failure: If the registry key could not be opened or is not binary,
- *          A dummy (empty) IStream object is returned.
- */
-IStream * WINAPI SHOpenRegStreamA(HKEY hkey, LPCSTR pszSubkey,
-                                  LPCSTR pszValue, DWORD dwMode)
-{
-  IStream *iStream;
-
-  TRACE("(%p,%s,%s,0x%08lx)\n", hkey, pszSubkey, pszValue, dwMode);
-
-  iStream = SHOpenRegStream2A(hkey, pszSubkey, pszValue, dwMode);
-  return iStream ? iStream : (IStream *)&rsDummyRegStream;
-}
-
-/*************************************************************************
- * SHOpenRegStreamW    [SHLWAPI.@]
- *
- * See SHOpenRegStreamA.
- */
-IStream * WINAPI SHOpenRegStreamW(HKEY hkey, LPCWSTR pszSubkey,
-                                  LPCWSTR pszValue, DWORD dwMode)
-{
-  IStream *iStream;
-
-  TRACE("(%p,%s,%s,0x%08lx)\n", hkey, debugstr_w(pszSubkey),
-        debugstr_w(pszValue), dwMode);
-  iStream = SHOpenRegStream2W(hkey, pszSubkey, pszValue, dwMode);
-  return iStream ? iStream : (IStream *)&rsDummyRegStream;
-}
-
-/*************************************************************************
- * @   [SHLWAPI.12]
- *
- * Create an IStream object on a block of memory.
- *
- * PARAMS
- * lpbData   [I] Memory block to create the IStream object on
- * dwDataLen [I] Length of data block
- *
- * RETURNS
- * Success: A pointer to the IStream object.
- * Failure: NULL, if any parameters are invalid or an error occurs.
- *
- * NOTES
- *  A copy of the memory pointed to by lpbData is made, and is freed
- *  when the stream is released.
- */
-IStream * WINAPI SHCreateMemStream(LPBYTE lpbData, DWORD dwDataLen)
-{
-  IStream *iStrmRet = NULL;
-
-  TRACE("(%p,%ld)\n", lpbData, dwDataLen);
-
-  if (lpbData)
-  {
-    LPBYTE lpbDup = (LPBYTE)HeapAlloc(GetProcessHeap(), 0, dwDataLen);
-
-    if (lpbDup)
-    {
-      memcpy(lpbDup, lpbData, dwDataLen);
-      iStrmRet = IStream_Create(NULL, lpbDup, dwDataLen);
-
-      if (!iStrmRet)
-        HeapFree(GetProcessHeap(), 0, lpbDup);
-    }
-  }
-  return iStrmRet;
-}
-
-/*************************************************************************
- * SHCreateStreamWrapper   [SHLWAPI.@]
- *
- * Create an IStream object on a block of memory.
- *
- * PARAMS
- * lpbData    [I] Memory block to create the IStream object on
- * dwDataLen  [I] Length of data block
- * dwReserved [I] Reserved, Must be 0.
- * lppStream  [O] Destination for IStream object
- *
- * RETURNS
- * Success: S_OK. lppStream contains the new IStream object.
- * Failure: E_INVALIDARG, if any parameters are invalid,
- *          E_OUTOFMEMORY if memory allocation fails.
- *
- * NOTES
- *  The stream assumes ownership of the memory passed to it.
- */
-HRESULT WINAPI SHCreateStreamWrapper(LPBYTE lpbData, DWORD dwDataLen,
-                                     DWORD dwReserved, IStream **lppStream)
-{
-  IStream* lpStream;
-
-  if (lppStream)
-    *lppStream = NULL;
-
-  if(dwReserved || !lppStream)
-    return E_INVALIDARG;
-
-  lpStream = IStream_Create(NULL, lpbData, dwDataLen);
-
-  if(!lpStream)
-    return E_OUTOFMEMORY;
-
-  IStream_QueryInterface(lpStream, &IID_IStream, (void**)lppStream);
-  IStream_Release(lpStream);
-  return S_OK;
-}