mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 16:12:58 +00:00
[MSPORTS]
Implement ComDBResizeDatabase. svn path=/trunk/; revision=53696
This commit is contained in:
parent
d28eae967a
commit
3b374be2f7
1 changed files with 82 additions and 2 deletions
|
@ -11,6 +11,8 @@
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(msports);
|
WINE_DEFAULT_DEBUG_CHANNEL(msports);
|
||||||
|
|
||||||
#define BITS_PER_BYTE 8
|
#define BITS_PER_BYTE 8
|
||||||
|
#define BITMAP_SIZE_INCREMENT 0x400
|
||||||
|
#define BITMAP_SIZE_INVALID_BITS 0x3FF
|
||||||
|
|
||||||
typedef struct _COMDB
|
typedef struct _COMDB
|
||||||
{
|
{
|
||||||
|
@ -276,6 +278,9 @@ ComDBGetCurrentPortUsage(IN HCOMDB hComDB,
|
||||||
BYTE cMask;
|
BYTE cMask;
|
||||||
LONG lError = ERROR_SUCCESS;
|
LONG lError = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
TRACE("ComDBGetCurrentPortUsage(%p %p %lu %lu %p)\n",
|
||||||
|
hComDB, Buffer, BufferSize, ReportType, MaxPortsReported);
|
||||||
|
|
||||||
if (hComDB == INVALID_HANDLE_VALUE ||
|
if (hComDB == INVALID_HANDLE_VALUE ||
|
||||||
hComDB == NULL ||
|
hComDB == NULL ||
|
||||||
(Buffer == NULL && MaxPortsReported == NULL) ||
|
(Buffer == NULL && MaxPortsReported == NULL) ||
|
||||||
|
@ -581,8 +586,83 @@ WINAPI
|
||||||
ComDBResizeDatabase(IN HCOMDB hComDB,
|
ComDBResizeDatabase(IN HCOMDB hComDB,
|
||||||
IN DWORD NewSize)
|
IN DWORD NewSize)
|
||||||
{
|
{
|
||||||
FIXME("ComDBResizeDatabase(%p %lu)\n", hComDB, NewSize);
|
PCOMDB pComDB;
|
||||||
return ERROR_CALL_NOT_IMPLEMENTED;
|
PBYTE pBitmap = NULL;
|
||||||
|
DWORD dwSize;
|
||||||
|
DWORD dwNewSize;
|
||||||
|
DWORD dwType;
|
||||||
|
LONG lError;
|
||||||
|
|
||||||
|
TRACE("ComDBResizeDatabase(%p %lu)\n", hComDB, NewSize);
|
||||||
|
|
||||||
|
if (hComDB == INVALID_HANDLE_VALUE ||
|
||||||
|
hComDB == NULL ||
|
||||||
|
(NewSize & BITMAP_SIZE_INVALID_BITS))
|
||||||
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
pComDB = (PCOMDB)hComDB;
|
||||||
|
|
||||||
|
/* Wait for the mutex */
|
||||||
|
WaitForSingleObject(pComDB->hMutex, INFINITE);
|
||||||
|
|
||||||
|
/* Get the required bitmap size */
|
||||||
|
lError = RegQueryValueExW(pComDB->hKey,
|
||||||
|
L"ComDB",
|
||||||
|
NULL,
|
||||||
|
&dwType,
|
||||||
|
NULL,
|
||||||
|
&dwSize);
|
||||||
|
if (lError != ERROR_SUCCESS)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
/* Check the size limits */
|
||||||
|
if (NewSize > COMDB_MAX_PORTS_ARBITRATED ||
|
||||||
|
NewSize <= dwSize * BITS_PER_BYTE)
|
||||||
|
{
|
||||||
|
lError = ERROR_BAD_LENGTH;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the new bitmap size */
|
||||||
|
dwNewSize = NewSize / BITS_PER_BYTE;
|
||||||
|
|
||||||
|
/* Allocate the new bitmap */
|
||||||
|
pBitmap = HeapAlloc(GetProcessHeap(),
|
||||||
|
HEAP_ZERO_MEMORY,
|
||||||
|
dwSize);
|
||||||
|
if (pBitmap == NULL)
|
||||||
|
{
|
||||||
|
ERR("Failed to allocate the bitmap!\n");
|
||||||
|
lError = ERROR_ACCESS_DENIED;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the current bitmap */
|
||||||
|
lError = RegQueryValueExW(pComDB->hKey,
|
||||||
|
L"ComDB",
|
||||||
|
NULL,
|
||||||
|
&dwType,
|
||||||
|
pBitmap,
|
||||||
|
&dwSize);
|
||||||
|
if (lError != ERROR_SUCCESS)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
/* Write the new bitmap */
|
||||||
|
lError = RegSetValueExW(pComDB->hKey,
|
||||||
|
L"ComDB",
|
||||||
|
0,
|
||||||
|
REG_BINARY,
|
||||||
|
pBitmap,
|
||||||
|
dwNewSize);
|
||||||
|
|
||||||
|
done:;
|
||||||
|
/* Release the mutex */
|
||||||
|
ReleaseMutex(pComDB->hMutex);
|
||||||
|
|
||||||
|
if (pBitmap != NULL)
|
||||||
|
HeapFree(GetProcessHeap(), 0, pBitmap);
|
||||||
|
|
||||||
|
return lError;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue