250 lines
4 KiB
C
250 lines
4 KiB
C
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
w95track.c
|
|
|
|
Abstract:
|
|
|
|
Routines to track calls to Win95Reg APIs. Used for debugging only.
|
|
|
|
Author:
|
|
|
|
Jim Schmidt (jimschm) 30-Jan-1998
|
|
|
|
Revisions:
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#include "pch.h"
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
|
#undef Win95RegOpenKeyExA
|
|
#undef Win95RegCreateKeyExA
|
|
#undef Win95RegOpenKeyExW
|
|
#undef Win95RegCreateKeyExW
|
|
|
|
#define DBG_W95TRACK "W95Track"
|
|
|
|
#define NO_MATCH 0xffffffff
|
|
|
|
DWORD g_DontCare95;
|
|
|
|
typedef struct {
|
|
PCSTR File;
|
|
DWORD Line;
|
|
HKEY Key;
|
|
CHAR SubKey[];
|
|
} KEYTRACK, *PKEYTRACK;
|
|
|
|
GROWLIST g_KeyTrackList95 = GROWLIST_INIT;
|
|
|
|
DWORD
|
|
pFindKeyReference95 (
|
|
HKEY Key
|
|
)
|
|
{
|
|
INT i;
|
|
DWORD Items;
|
|
PKEYTRACK KeyTrack;
|
|
|
|
Items = GrowListGetSize (&g_KeyTrackList95);
|
|
|
|
for (i = (INT) (Items - 1) ; i >= 0 ; i--) {
|
|
KeyTrack = (PKEYTRACK) GrowListGetItem (&g_KeyTrackList95, (DWORD) i);
|
|
|
|
if (KeyTrack && KeyTrack->Key == Key) {
|
|
return (DWORD) i;
|
|
}
|
|
}
|
|
|
|
return NO_MATCH;
|
|
}
|
|
|
|
VOID
|
|
pAddKeyReference95A (
|
|
HKEY Key,
|
|
PCSTR SubKey,
|
|
PCSTR File,
|
|
DWORD Line
|
|
)
|
|
{
|
|
PKEYTRACK KeyTrack;
|
|
DWORD Size;
|
|
|
|
Size = sizeof (KEYTRACK) + SizeOfString (SubKey);
|
|
|
|
KeyTrack = (PKEYTRACK) MemAlloc (g_hHeap, 0, Size);
|
|
KeyTrack->Key = Key;
|
|
KeyTrack->File = File;
|
|
KeyTrack->Line = Line;
|
|
StringCopy (KeyTrack->SubKey, SubKey);
|
|
|
|
GrowListAppend (&g_KeyTrackList95, (PBYTE) KeyTrack, Size);
|
|
|
|
MemFree (g_hHeap, 0, KeyTrack);
|
|
}
|
|
|
|
VOID
|
|
pAddKeyReference95W (
|
|
HKEY Key,
|
|
PCWSTR SubKey,
|
|
PCSTR File,
|
|
DWORD Line
|
|
)
|
|
{
|
|
PCSTR AnsiSubKey;
|
|
|
|
AnsiSubKey = ConvertWtoA (SubKey);
|
|
pAddKeyReference95A (Key, AnsiSubKey, File, Line);
|
|
FreeConvertedStr (AnsiSubKey);
|
|
}
|
|
|
|
BOOL
|
|
pDelKeyReference95 (
|
|
HKEY Key
|
|
)
|
|
{
|
|
DWORD Index;
|
|
|
|
Index = pFindKeyReference95 (Key);
|
|
if (Index != NO_MATCH) {
|
|
GrowListDeleteItem (&g_KeyTrackList95, Index);
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
VOID
|
|
DumpOpenKeys95 (
|
|
VOID
|
|
)
|
|
{
|
|
DWORD d;
|
|
DWORD Items;
|
|
PKEYTRACK KeyTrack;
|
|
|
|
Items = GrowListGetSize (&g_KeyTrackList95);
|
|
|
|
if (Items) {
|
|
DEBUGMSG ((DBG_ERROR, "Unclosed reg keys: %u", Items));
|
|
}
|
|
|
|
for (d = 0 ; d < Items ; d++) {
|
|
KeyTrack = (PKEYTRACK) GrowListGetItem (&g_KeyTrackList95, d);
|
|
DEBUGMSG ((DBG_W95TRACK, "Open Key: %hs (%hs line %u)", KeyTrack->SubKey, KeyTrack->File, KeyTrack->Line));
|
|
}
|
|
}
|
|
|
|
VOID
|
|
RegTrackTerminate95 (
|
|
VOID
|
|
)
|
|
{
|
|
FreeGrowList (&g_KeyTrackList95);
|
|
}
|
|
|
|
VOID
|
|
DebugRegOpenRootKey95A (
|
|
HKEY Key,
|
|
PCSTR SubKey,
|
|
PCSTR File,
|
|
DWORD Line
|
|
)
|
|
{
|
|
pAddKeyReference95A (Key, SubKey, File, Line);
|
|
}
|
|
|
|
|
|
VOID
|
|
DebugRegOpenRootKey95W (
|
|
HKEY Key,
|
|
PCWSTR SubKey,
|
|
PCSTR File,
|
|
DWORD Line
|
|
)
|
|
{
|
|
pAddKeyReference95W (Key, SubKey, File, Line);
|
|
}
|
|
|
|
|
|
LONG
|
|
DebugRegOpenKeyEx95A (
|
|
HKEY Key,
|
|
PCSTR SubKey,
|
|
DWORD Unused,
|
|
REGSAM SamMask,
|
|
PHKEY ResultPtr,
|
|
PCSTR File,
|
|
DWORD Line
|
|
)
|
|
{
|
|
LONG rc;
|
|
|
|
rc = Win95RegOpenKeyExA (Key, SubKey, Unused, SamMask, ResultPtr);
|
|
if (rc == ERROR_SUCCESS) {
|
|
pAddKeyReference95A (*ResultPtr, SubKey, File, Line);
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
LONG
|
|
DebugRegOpenKeyEx95W (
|
|
HKEY Key,
|
|
PCWSTR SubKey,
|
|
DWORD Unused,
|
|
REGSAM SamMask,
|
|
PHKEY ResultPtr,
|
|
PCSTR File,
|
|
DWORD Line
|
|
)
|
|
{
|
|
LONG rc;
|
|
|
|
rc = Win95RegOpenKeyExW (Key, SubKey, Unused, SamMask, ResultPtr);
|
|
|
|
if (rc == ERROR_SUCCESS) {
|
|
pAddKeyReference95W (*ResultPtr, SubKey, File, Line);
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
LONG
|
|
DebugCloseRegKey95 (
|
|
HKEY Key,
|
|
PCSTR File,
|
|
DWORD Line
|
|
)
|
|
{
|
|
LONG rc;
|
|
|
|
rc = RealCloseRegKey95 (Key);
|
|
if (rc == ERROR_SUCCESS) {
|
|
if (!pDelKeyReference95 (Key)) {
|
|
DEBUGMSG ((
|
|
DBG_ERROR,
|
|
"Reg key handle closed via CloseRegKey95, but not opened "
|
|
"with a tracked registry API. %s line %u",
|
|
File,
|
|
Line
|
|
));
|
|
}
|
|
}
|
|
|
|
return rc;
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|