📄 w2k_img.c
字号:
}
if (j = imgPathCurrentW (awPath, MAX_PATH))
{
if (n = CallbackW (pwModule, awPath, j, pContext))
return n;
}
i = 0;
while ((j = imgPathVariableW (gawSymbolPath1,
awPath, MAX_PATH, i++))
!= -1)
{
if (j)
{
if (n = CallbackW (pwModule, awPath, j, pContext))
return n;
}
}
i = 0;
while ((j = imgPathVariableW (gawSymbolPath2,
awPath, MAX_PATH, i++))
!= -1)
{
if (j)
{
if (n = CallbackW (pwModule, awPath, j, pContext))
return n;
}
}
if (j = imgPathWindowsW (awPath, MAX_PATH))
{
if (n = CallbackW (pwModule, awPath, j, pContext))
return n;
}
n = CallbackW (pwModule, NULL, 0, pContext);
}
return n;
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathSymbolsA (PBYTE pbModule, // NULL: ntoskrnl
PBYTE pbExtension,// NULL: .dbg
PBYTE pbPath, // NULL: current dir
PBYTE pbBuffer, // can be == pbPath
DWORD dBuffer,
BOOL fSymbols)
{
BYTE abBuffer [MAX_PATH];
PBYTE pbModule1, pbExtension1, pbSymbols;
DWORD dNext, dName, dExtension, n1, n2, n3, n4;
DWORD n = 0;
pbModule1 = (pbModule != NULL ? pbModule : gabKernel);
pbExtension1 = (pbExtension != NULL ? pbExtension : gabDbg);
pbSymbols = (fSymbols ? gabSymbols : gabNull);
dNext = imgPathCanonicalA (pbPath, abBuffer, MAX_PATH);
dName = imgPathNameA (pbModule1, &dExtension);
if (dNext && (pbModule1 [dExtension ] == '.')
&& pbModule1 [dExtension+1]
&&
(dNext + (n1 = lstrlenA (pbSymbols))
+ (n2 = lstrlenA (pbModule1 + (dExtension+1))) + 1
+ (n3 = dExtension - dName)
+ (n4 = lstrlenA (pbExtension1))
< MAX_PATH))
{
n = dNext;
lstrcpyA (abBuffer + n, pbSymbols);
n += n1;
lstrcpyA (abBuffer + n, pbModule1 + (dExtension+1));
n += n2;
abBuffer [n++] = '\\';
lstrcpynA (abBuffer + n, pbModule1 + dName, n3 + 1);
n += n3;
lstrcpyA (abBuffer + n, pbExtension1);
n += n4;
}
if ((pbBuffer != NULL) && dBuffer)
{
if (n >= dBuffer) n = 0;
abBuffer [n] = 0;
lstrcpyA (pbBuffer, abBuffer);
}
return n;
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathSymbolsW (PWORD pwModule, // NULL: ntoskrnl
PWORD pwExtension,// NULL: .dbg
PWORD pwPath, // NULL: current dir
PWORD pwBuffer, // can be == pwPath
DWORD dBuffer,
BOOL fSymbols)
{
WORD awBuffer [MAX_PATH];
PWORD pwModule1, pwExtension1, pwSymbols;
DWORD dNext, dName, dExtension, n1, n2, n3, n4;
DWORD n = 0;
pwModule1 = (pwModule != NULL ? pwModule : gawKernel);
pwExtension1 = (pwExtension != NULL ? pwExtension : gawDbg);
pwSymbols = (fSymbols ? gawSymbols : gawNull);
dNext = imgPathCanonicalW (pwPath, awBuffer, MAX_PATH);
dName = imgPathNameW (pwModule1, &dExtension);
if (dNext && (pwModule1 [dExtension ] == '.')
&& pwModule1 [dExtension+1]
&&
(dNext + (n1 = lstrlenW (pwSymbols))
+ (n2 = lstrlenW (pwModule1 + (dExtension+1))) + 1
+ (n3 = dExtension - dName)
+ (n4 = lstrlenW (pwExtension1))
< MAX_PATH))
{
n = dNext;
lstrcpyW (awBuffer + n, pwSymbols);
n += n1;
lstrcpyW (awBuffer + n, pwModule1 + (dExtension+1));
n += n2;
awBuffer [n++] = '\\';
lstrcpynW (awBuffer + n, pwModule1 + dName, n3 + 1);
n += n3;
lstrcpyW (awBuffer + n, pwExtension1);
n += n4;
}
if ((pwBuffer != NULL) && dBuffer)
{
if (n >= dBuffer) n = 0;
awBuffer [n] = 0;
lstrcpyW (pwBuffer, awBuffer);
}
return n;
}
// -----------------------------------------------------------------
DWORD CALLBACK imgPathCallbackA (PBYTE pbModule,
PBYTE pbPath,
DWORD dPath,
PIMG_CONTEXT pic)
{
BYTE abBuffer [MAX_PATH];
PBYTE pbBuffer, pbExtension;
DWORD dBuffer;
DWORD n = 0;
if (pic != NULL)
{
pbExtension = pic->pbExtension;
pbBuffer = pic->pbBuffer;
dBuffer = pic->dBuffer;
}
else
{
pbExtension = NULL;
pbBuffer = NULL;
dBuffer = 0;
}
if (pbPath != NULL)
{
if (((n = imgPathSymbolsA (pbModule, pbExtension,
pbPath, abBuffer, MAX_PATH,
TRUE))
&&
imgFileTestA (abBuffer))
||
((n = imgPathSymbolsA (pbModule, pbExtension,
pbPath, abBuffer, MAX_PATH,
FALSE))
&&
imgFileTestA (abBuffer)))
{
if ((pbBuffer != NULL) && dBuffer)
{
if (n >= dBuffer)
{
abBuffer [0] = 0;
n = -1;
}
lstrcpyA (pbBuffer, abBuffer);
}
}
else
{
n = 0;
}
}
else
{
if ((pbBuffer != NULL) && dBuffer) pbBuffer [0] = 0;
}
return n;
}
// -----------------------------------------------------------------
DWORD CALLBACK imgPathCallbackW (PWORD pwModule,
PWORD pwPath,
DWORD dPath,
PIMG_CONTEXT pic)
{
WORD awBuffer [MAX_PATH];
PWORD pwBuffer, pwExtension;
DWORD dBuffer;
DWORD n = 0;
if (pic != NULL)
{
pwExtension = pic->pwExtension;
pwBuffer = pic->pwBuffer;
dBuffer = pic->dBuffer;
}
else
{
pwExtension = NULL;
pwBuffer = NULL;
dBuffer = 0;
}
if (pwPath != NULL)
{
if (((n = imgPathSymbolsW (pwModule, pwExtension,
pwPath, awBuffer, MAX_PATH,
TRUE))
&&
imgFileTestW (awBuffer))
||
((n = imgPathSymbolsW (pwModule, pwExtension,
pwPath, awBuffer, MAX_PATH,
FALSE))
&&
imgFileTestW (awBuffer)))
{
if ((pwBuffer != NULL) && dBuffer)
{
if (n >= dBuffer)
{
awBuffer [0] = 0;
n = -1;
}
lstrcpyW (pwBuffer, awBuffer);
}
}
else
{
n = 0;
}
}
else
{
if ((pwBuffer != NULL) && dBuffer) pwBuffer [0] = 0;
}
return n;
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathSymbolsExA (PBYTE pbModule,
PBYTE pbExtension,
PBYTE pbBuffer,
DWORD dBuffer)
{
IMG_CONTEXT ic;
DWORD n = 0;
ic.pbExtension = pbExtension;
ic.pbBuffer = pbBuffer;
ic.dBuffer = dBuffer;
n = imgPathEnumerateA (imgPathCallbackA, pbModule, &ic);
return (n != -1 ? n : 0);
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathSymbolsExW (PWORD pwModule,
PWORD pwExtension,
PWORD pwBuffer,
DWORD dBuffer)
{
IMG_CONTEXT ic;
DWORD n = 0;
ic.pwExtension = pwExtension;
ic.pwBuffer = pwBuffer;
ic.dBuffer = dBuffer;
n = imgPathEnumerateW (imgPathCallbackW, pwModule, &ic);
return (n != -1 ? n : 0);
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathDbgA (PBYTE pbModule,
PBYTE pbBuffer,
DWORD dBuffer)
{
return imgPathSymbolsExA (pbModule, gabDbg, pbBuffer, dBuffer);
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathDbgW (PWORD pwModule,
PWORD pwBuffer,
DWORD dBuffer)
{
return imgPathSymbolsExW (pwModule, gawDbg, pwBuffer, dBuffer);
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathPdbA (PBYTE pbModule,
PBYTE pbBuffer,
DWORD dBuffer)
{
return imgPathSymbolsExA (pbModule, gabPdb, pbBuffer, dBuffer);
}
// -----------------------------------------------------------------
DWORD WINAPI imgPathPdbW (PWORD pwModule,
PWORD pwBuffer,
DWORD dBuffer)
{
return imgPathSymbolsExW (pwModule, gawPdb, pwBuffer, dBuffer);
}
// =================================================================
// FILE MANAGEMENT
// =================================================================
HANDLE WINAPI imgFileClose (HANDLE hf)
{
if (hf != INVALID_HANDLE_VALUE) CloseHandle (hf);
return INVALID_HANDLE_VALUE;
}
// -----------------------------------------------------------------
HANDLE WINAPI imgFileOpenA (PBYTE pbPath)
{
HANDLE hf = INVALID_HANDLE_VALUE;
if ((pbPath != NULL) && pbPath [0])
{
hf = CreateFileA (pbPath, GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
}
return hf;
}
// -----------------------------------------------------------------
HANDLE WINAPI imgFileOpenW (PWORD pwPath)
{
HANDLE hf = INVALID_HANDLE_VALUE;
if ((pwPath != NULL) && pwPath [0])
{
hf = CreateFileW (pwPath, GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
}
return hf;
}
// -----------------------------------------------------------------
HANDLE WINAPI imgFileNewA (PBYTE pbPath)
{
HANDLE hf = INVALID_HANDLE_VALUE;
if ((pbPath != NULL) && pbPath [0])
{
hf = CreateFileA (pbPath, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN |
FILE_ATTRIBUTE_NORMAL,
NULL);
}
return hf;
}
// -----------------------------------------------------------------
HANDLE WINAPI imgFileNewW (PWORD pwPath)
{
HANDLE hf = INVALID_HANDLE_VALUE;
if ((pwPath != NULL) && pwPath [0])
{
hf = CreateFileW (pwPath, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN |
FILE_ATTRIBUTE_NORMAL,
NULL);
}
return hf;
}
// -----------------------------------------------------------------
BOOL WINAPI imgFileTestA (PBYTE pbPath)
{
HANDLE hff;
WIN32_FIND_DATAA wfd;
BOOL fOk = FALSE;
if ((hff = FindFirstFileA (pbPath, &wfd))
!= INVALID_HANDLE_VALUE)
{
fOk = !(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
FindClose (hff);
}
return fOk;
}
// -----------------------------------------------------------------
BOOL WINAPI imgFileTestW (PWORD pwPath)
{
HANDLE hff;
WIN32_FIND_DATAW wfd;
BOOL fOk = FALSE;
if ((hff = FindFirstFileW (pwPath, &wfd))
!= INVALID_HANDLE_VALUE)
{
fOk = !(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
FindClose (hff);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -