diff --git a/CMakeLists.txt b/CMakeLists.txt index ec8def8..a0af226 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(RpcView) set(RPCVIEW_VERSION_MAJOR 0) set(RPCVIEW_VERSION_MINOR 2) -set(RPCVIEW_VERSION_RELEASE 0) +set(RPCVIEW_VERSION_RELEASE 1) # configure a header file to pass some of the CMake settings to the source code configure_file ( diff --git a/RpcCore/RpcCore.c b/RpcCore/RpcCore.c index 9c093b2..d9165d9 100644 --- a/RpcCore/RpcCore.c +++ b/RpcCore/RpcCore.c @@ -19,7 +19,7 @@ #pragma comment(lib,"Version.lib") #pragma comment(lib,"Userenv.lib") -#define MAX_SIMPLE_DICT_ENTRIES 0x400 +#define MAX_SIMPLE_DICT_ENTRIES 0x200 #define RPC_MAX_ENDPOINT_PROTOCOL_SIZE 0x100 #define RPC_MAX_ENDPOINT_NAME_SIZE 0x100 #define RPC_MAX_DLL_NAME_SIZE 0x100 @@ -191,7 +191,7 @@ BOOL WINAPI GetRpcServerAddressCallback(HANDLE hProcess, UINT Index, VOID PTR_T UNREFERENCED_PARAMETER(Index); if (!ReadProcessMemory(hProcess,pSimpleDictEntry,&RpcInterface,sizeof(RpcInterface),NULL)) goto End; - + if ( (RpcInterface.RpcServerInterface.Length==sizeof(RPC_SERVER_INTERFACE_T)) && (!memcmp(&RpcInterface.RpcServerInterface.TransferSyntax, &DceRpcSyntaxUuid, sizeof(DceRpcSyntaxUuid)))) { diff --git a/RpcCore/RpcCore4_32bits/RpcInternals.h b/RpcCore/RpcCore4_32bits/RpcInternals.h index b4698a6..7b33f85 100644 --- a/RpcCore/RpcCore4_32bits/RpcInternals.h +++ b/RpcCore/RpcCore4_32bits/RpcInternals.h @@ -18,9 +18,13 @@ static UINT64 RPC_CORE_RUNTIME_VERSION[] = { 0xA0000295A0132LL, //10.0.10586.306 0xA0000380603E8LL, //10.0.14342.1000 0xA000038190000LL, //10.0.14361.0 - 0xA000038390000LL, //10.0.14393.0 + 0xA000038390000LL, //10.0.14393.0 0xA000038390052LL, //10.0.14393.82 - 0xA00003AD70000LL //10.0.15063.138 + 0xA00003AD70000LL, //10.0.15063.0 + 0xA00003AD701BFLL, //10.0.15063.447 + 0xA00003AD702A2LL, //10.0.15063.674 + 0xA00003F6803E8LL, //10.0.16232.1000 + 0xA00003FAB000FLL, //10.0.16299.15 }; #ifdef _WIN64 diff --git a/RpcCore/RpcCore4_64bits/RpcInternals.h b/RpcCore/RpcCore4_64bits/RpcInternals.h index ed571cd..ce5e200 100644 --- a/RpcCore/RpcCore4_64bits/RpcInternals.h +++ b/RpcCore/RpcCore4_64bits/RpcInternals.h @@ -17,9 +17,12 @@ static UINT64 RPC_CORE_RUNTIME_VERSION[] = { 0xA0000295A0132LL, //10.0.10586.306 0xA0000380603E8LL, //10.0.14342.1000 0xA000038190000LL, //10.0.14361.0 - 0xA000038390000LL, //10.0.14393.0 - 0xA000038390052LL, //10.0.14393.82 - 0xA00003AD70000LL //10.0.15063.138 + 0xA000038390000LL, //10.0.14393.0 + 0xA00003AD70000LL, //10.0.15063.0 + 0xA00003AD701BFLL, //10.0.15063.447 + 0xA00003AD702A2LL, //10.0.15063.674 + 0xA00003F6803E8LL, //10.0.16232.1000 + 0xA00003FAB000FLL, //10.0.16299.15 }; #define RPC_CORE_DESCRIPTION "Windows 10 64bits runtime core" diff --git a/RpcView/MainWindow.cpp b/RpcView/MainWindow.cpp index 52e00ce..131af0f 100644 --- a/RpcView/MainWindow.cpp +++ b/RpcView/MainWindow.cpp @@ -444,7 +444,7 @@ void MainWindow_C::ConfigureSymbols() CurrentSymbolsPath, &bOk ); - if ( bOk && !NewSymbolsPath.isEmpty() ) + if ( bOk ) { pSettings->setValue("SymbolsPath",NewSymbolsPath); SetEnvironmentVariableA("RpcViewSymbolPath",NewSymbolsPath.toAscii()); diff --git a/RpcView/Pdb.c b/RpcView/Pdb.c index ca54615..bf240b1 100644 --- a/RpcView/Pdb.c +++ b/RpcView/Pdb.c @@ -1,3 +1,4 @@ +#define _CRT_SECURE_NO_WARNINGS #include "Pdb.h" #include #include @@ -80,8 +81,9 @@ End: BOOL WINAPI GetPdbFilePath(HANDLE hProcess, VOID* pModuleBase, UCHAR* pPdbPath, UINT PdbPathSize) { CV_INFO_PDB70 Pdb70Info; - CHAR SymbolPath[MAX_PATH]; - BOOL bResult = FALSE; + CHAR SymbolPath[MAX_PATH] = { 0 }; + CHAR NtSymbolPath[MAX_PATH] = { 0 }; + BOOL bResult = FALSE; if (!GetModulePdbInfo(hProcess, pModuleBase, &Pdb70Info)) goto End; /* @@ -97,7 +99,18 @@ BOOL WINAPI GetPdbFilePath(HANDLE hProcess, VOID* pModuleBase, UCHAR* pPdbPath, } else { - if (GetEnvironmentVariableA("RpcViewSymbolPath", SymbolPath, sizeof(SymbolPath)) == 0) goto End; + int iResult; + char* pStar = NULL; + + if (GetEnvironmentVariableA("RpcViewSymbolPath", NtSymbolPath, sizeof(NtSymbolPath)) == 0) + { + if (GetEnvironmentVariableA("_NT_SYMBOL_PATH", NtSymbolPath, sizeof(NtSymbolPath)) == 0) goto End; + } + iResult = sscanf(NtSymbolPath, "srv*%259s", SymbolPath); + if (iResult == 0) goto End; + pStar = strchr(SymbolPath+4, '*'); + if (pStar != NULL) *pStar = 0; + StringCbPrintfA((STRSAFE_LPSTR)pPdbPath, PdbPathSize, "%s\\%s\\%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X%X\\%s", SymbolPath, Pdb70Info.PdbFileName, @@ -116,7 +129,6 @@ BOOL WINAPI GetPdbFilePath(HANDLE hProcess, VOID* pModuleBase, UCHAR* pPdbPath, Pdb70Info.PdbFileName ); } - //printf("pdb path: %s\n",pPdbPath); bResult = TRUE; End: return (bResult);