?? newapis_fixed.h
字號:
*/
SetLastError((unsigned long)ERROR_INSUFFICIENT_BUFFER);
dwRc = dwRc + 1;
} else {
/*
* On buffer okay, return actual size not
* including terminating null.
*/
lstrcpyn(ptszLong, tsz, ctchBuf);
}
}
/*
* Free the pidl.
*/
if (SUCCEEDED(SHGetMalloc(&pMalloc))) {
#ifdef __cplusplus
pMalloc->Free(pidl);
pMalloc->Release();
#else
pMalloc->lpVtbl->Free(pMalloc, pidl);
pMalloc->lpVtbl->Release(pMalloc);
#endif
}
}
#ifndef UNICODE
}
#endif
/*
* Release the desktop folder now that we no longer
* need it.
*/
#ifdef __cplusplus
psfDesk->Release();
#else
psfDesk->lpVtbl->Release(psfDesk);
#endif
}
}
return dwRc;
}
/*
* The stub that probes to decide which version to use.
*/
static DWORD WINAPI
Probe_GetLongPathName(LPCTSTR ptszShort, LPTSTR ptszLong, DWORD ctchBuf)
{
HINSTANCE hinst;
FARPROC fp;
DWORD dwRc;
// ERIK: Wrong! BOOL (CALLBACK *RealGetLongPathName)(LPCTSTR, LPTSTR, DWORD);
DWORD (CALLBACK *RealGetLongPathName)(LPCTSTR, LPTSTR, DWORD);
hinst = GetModuleHandle(TEXT("KERNEL32"));
#ifdef UNICODE
fp = GetProcAddress(hinst, "GetLongPathNameW");
#else
fp = GetProcAddress(hinst, "GetLongPathNameA");
#endif
if (fp) {
*(FARPROC *)&RealGetLongPathName = fp;
dwRc = RealGetLongPathName(ptszShort, ptszLong, ctchBuf);
if (dwRc || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) {
GetLongPathName = RealGetLongPathName;
} else {
GetLongPathName = Emulate_GetLongPathName;
dwRc = GetLongPathName(ptszShort, ptszLong, ctchBuf);
}
} else {
GetLongPathName = Emulate_GetLongPathName;
dwRc = GetLongPathName(ptszShort, ptszLong, ctchBuf);
}
return dwRc;
}
DWORD (CALLBACK *GetLongPathName)(LPCTSTR, LPTSTR, DWORD) =
Probe_GetLongPathName;
#endif /* COMPILE_NEWAPIS_STUBS */
#endif /* WANT_GETLONGPATHNAME_WRAPPER */
/*****************************************************************************
*
* GetFileAttributesEx
*
*****************************************************************************/
#ifdef WANT_GETFILEATTRIBUTESEX_WRAPPER
#undef GetFileAttributesEx
#define GetFileAttributesEx _GetFileAttributesEx
/*
* Really old header files don't even have definitions for these constants
* and structures.
*/
#if WINVER < 0x040A
typedef enum _GET_FILEEX_INFO_LEVELS {
GetFileExInfoStandard,
GetFileExMaxInfoLevel
} GET_FILEEX_INFO_LEVELS;
typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
#endif
extern BOOL (CALLBACK *GetFileAttributesEx)
(LPCTSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
/*
* Exactly one file should define this symbol.
*/
#ifdef COMPILE_NEWAPIS_STUBS
/*
* The version to use if we are forced to emulate.
*/
static BOOL WINAPI
Emulate_GetFileAttributesEx(LPCTSTR ptszFile, GET_FILEEX_INFO_LEVELS level,
LPVOID pv)
{
BOOL fRc;
if (level == GetFileExInfoStandard) {
/*
* Must call GetFileAttributes first to avoid returning random
* values if the so-called filename contains wildcards.
*/
if (GetFileAttributes(ptszFile) != 0xFFFFFFFF) {
HANDLE hfind;
WIN32_FIND_DATA wfd;
hfind = FindFirstFile(ptszFile, &wfd);
if (hfind != INVALID_HANDLE_VALUE) {
LPWIN32_FILE_ATTRIBUTE_DATA pfad = pv;
FindClose(hfind);
pfad->dwFileAttributes = wfd.dwFileAttributes;
pfad->ftCreationTime = wfd.ftCreationTime;
pfad->ftLastAccessTime = wfd.ftLastAccessTime;
pfad->ftLastWriteTime = wfd.ftLastWriteTime;
pfad->nFileSizeHigh = wfd.nFileSizeHigh;
pfad->nFileSizeLow = wfd.nFileSizeLow;
fRc = TRUE;
} else {
/*
* FindFirstFile already called SetLastError() for us.
*/
fRc = FALSE;
}
} else {
/*
* GetFileAttributes already called SetLastError() for us.
*/
fRc = FALSE;
}
} else {
/*
* Unknown info level.
*/
SetLastError(ERROR_INVALID_PARAMETER);
fRc = FALSE;
}
return fRc;
}
/*
* The stub that probes to decide which version to use.
*/
static BOOL WINAPI
Probe_GetFileAttributesEx(LPCTSTR ptszFile, GET_FILEEX_INFO_LEVELS level,
LPVOID pv)
{
HINSTANCE hinst;
FARPROC fp;
BOOL fRc;
BOOL (CALLBACK *RealGetFileAttributesEx)
(LPCTSTR, GET_FILEEX_INFO_LEVELS, LPVOID);
hinst = GetModuleHandle(TEXT("KERNEL32"));
#ifdef UNICODE
fp = GetProcAddress(hinst, "GetFileAttributesExW");
#else
fp = GetProcAddress(hinst, "GetFileAttributesExA");
#endif
if (fp) {
*(FARPROC *)&RealGetFileAttributesEx = fp;
fRc = RealGetFileAttributesEx(ptszFile, level, pv);
if (fRc || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) {
GetFileAttributesEx = RealGetFileAttributesEx;
} else {
GetFileAttributesEx = Emulate_GetFileAttributesEx;
fRc = GetFileAttributesEx(ptszFile, level, pv);
}
} else {
GetFileAttributesEx = Emulate_GetFileAttributesEx;
fRc = GetFileAttributesEx(ptszFile, level, pv);
}
return fRc;
}
BOOL (CALLBACK *GetFileAttributesEx)
(LPCTSTR, GET_FILEEX_INFO_LEVELS, LPVOID) =
Probe_GetFileAttributesEx;
#endif /* COMPILE_NEWAPIS_STUBS */
#endif /* WANT_GETFILEATTRIBUTESEX_WRAPPER */
/*****************************************************************************
*
* IsDebuggerPresent
*
*****************************************************************************/
#ifdef WANT_ISDEBUGGERPRESENT_WRAPPER
#define IsDebuggerPresent _IsDebuggerPresent
extern BOOL (CALLBACK *IsDebuggerPresent)(VOID);
/*
* Exactly one file should define this symbol.
*/
#ifdef COMPILE_NEWAPIS_STUBS
/*
* The version to use if we are forced to emulate.
*/
static BOOL WINAPI
Emulate_IsDebuggerPresent(VOID)
{
/* No way to tell, so just say "no". */
return FALSE;
}
/*
* The stub that probes to decide which version to use.
*/
static BOOL WINAPI
Probe_IsDebuggerPresent(VOID)
{
HINSTANCE hinst;
FARPROC fp;
BOOL (CALLBACK *RealIsDebuggerPresent)(VOID);
hinst = GetModuleHandle(TEXT("KERNEL32"));
fp = GetProcAddress(hinst, "IsDebuggerPresent");
if (fp) {
*(FARPROC *)&IsDebuggerPresent = fp;
} else {
IsDebuggerPresent = Emulate_IsDebuggerPresent;
}
return IsDebuggerPresent();
}
BOOL (CALLBACK *IsDebuggerPresent)(VOID) =
Probe_IsDebuggerPresent;
#endif /* COMPILE_NEWAPIS_STUBS */
#endif /* WANT_ISDEBUGGERPRESENT_WRAPPER */
#ifdef __cplusplus
}
#endif /* __cplusplus */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -