mirror of
https://github.com/silverf0x/RpcView
synced 2026-06-08 17:26:38 +00:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3de26eaa04 | |||
| d796ddeeb3 | |||
| 32b1f9c0d2 | |||
| cf5615c21c | |||
| a5e4fd2c43 | |||
| 0554224b54 | |||
| 9c0f46d029 | |||
| 51e5b1e09f | |||
| b8ff63ec59 | |||
| 30bfa47b8c | |||
| 1ac3d4a63c | |||
| fa78abfb55 | |||
| 362d32d98f | |||
| 3eb61e7076 | |||
| 99c858af98 | |||
| cce523d939 | |||
| 85ff861717 | |||
| 6b05426e63 | |||
| 6d5625087a |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+11
-6
@@ -3,8 +3,13 @@ cmake_minimum_required (VERSION 3.0.2)
|
||||
project(RpcView)
|
||||
|
||||
set(RPCVIEW_VERSION_MAJOR 0)
|
||||
set(RPCVIEW_VERSION_MINOR 2)
|
||||
set(RPCVIEW_VERSION_RELEASE 1)
|
||||
set(RPCVIEW_VERSION_MINOR 3)
|
||||
set(RPCVIEW_VERSION_RELEASE 0)
|
||||
if($ENV{APPVEYOR_BUILD_NUMBER})
|
||||
set(RPCVIEW_VERSION_BUILD $ENV{APPVEYOR_BUILD_NUMBER})
|
||||
else()
|
||||
set(RPCVIEW_VERSION_BUILD 0)
|
||||
endif()
|
||||
|
||||
# configure a header file to pass some of the CMake settings to the source code
|
||||
configure_file (
|
||||
@@ -19,11 +24,11 @@ include_directories("${PROJECT_BINARY_DIR}")
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "/W3 /WX /MTd /EHsc /Zi")
|
||||
set(CMAKE_C_FLAGS_DEBUG "/W4 /WX /MTd /EHsc /Zi")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "/W4 /WX /MDd /EHsc /Zi")
|
||||
set(CMAKE_C_FLAGS_DEBUG "/W4 /WX /MDd /EHsc /Zi")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "/W3 /WX /O2 /Oi /Ot /Gy /MT /EHsc /MP")
|
||||
set(CMAKE_C_FLAGS_RELEASE "/W4 /WX /O2 /Oi /Ot /Gy /MT /EHsc /MP")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "/W4 /WX /O2 /Oi /Ot /Gy /MD /EHsc /MP")
|
||||
set(CMAKE_C_FLAGS_RELEASE "/W4 /WX /O2 /Oi /Ot /Gy /MD /EHsc /MP")
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS "/INCREMENTAL:NO /OPT:REF /OPT:ICF")
|
||||
|
||||
|
||||
@@ -3,45 +3,46 @@
|
||||
|
||||
#define QT_BUILD_CONFIGURE
|
||||
#define NOMINMAX
|
||||
#include <QtGui/QSortFilterProxyModel>
|
||||
#include <QtCore/QSortFilterProxyModel>
|
||||
#include <QtGui/QStandardItemModel>
|
||||
#include <QtGui/QDockWidget>
|
||||
#include <QtGui/QLabel>
|
||||
#include <QtGui/QTreeView>
|
||||
#include <QtGui/QGridLayout>
|
||||
#include <QtGui/QGroupBox>
|
||||
#include <QtGui/QDockWidget>
|
||||
#include <QtGui/QTextEdit>
|
||||
#include <QtGui/QLineEdit>
|
||||
#include <QtGui/QApplication>
|
||||
#include <QtGui/QFormLayout>
|
||||
#include <QtGui/QAbstractItemView>
|
||||
#include <QtWidgets/QDockWidget>
|
||||
#include <QtWidgets/QLabel>
|
||||
#include <QtWidgets/QTreeView>
|
||||
#include <QtWidgets/QGridLayout>
|
||||
#include <QtWidgets/QGroupBox>
|
||||
#include <QtWidgets/QDockWidget>
|
||||
#include <QtWidgets/QTextEdit>
|
||||
#include <QtWidgets/QLineEdit>
|
||||
#include <QtWidgets/QApplication>
|
||||
#include <QtWidgets/QFormLayout>
|
||||
#include <QtWidgets/QAbstractItemView>
|
||||
#include <QtCore/QTimer>
|
||||
#include <QtGui/QMainWindow>
|
||||
#include <QtGui/QStatusBar>
|
||||
#include <QtGui/QAction>
|
||||
#include <QtGui/QActionGroup>
|
||||
#include <QtGui/QMenu>
|
||||
#include <QtGui/QMenuBar>
|
||||
#include <QtWidgets/QMainWindow>
|
||||
#include <QtWidgets/QStatusBar>
|
||||
#include <QtWidgets/QAction>
|
||||
#include <QtWidgets/QActionGroup>
|
||||
#include <QtWidgets/QMenu>
|
||||
#include <QtWidgets/QMenuBar>
|
||||
#include <QtGui/QPixmap>
|
||||
#include <QtGui/QTreeWidgetItem>
|
||||
#include <QtGui/QTreeWidget>
|
||||
#include <QtGui/QMessageBox>
|
||||
#include <QtWidgets/QTreeWidgetItem>
|
||||
#include <QtWidgets/QTreeWidget>
|
||||
#include <QtWidgets/QMessageBox>
|
||||
#include <QtCore/QFile>
|
||||
#include <QtCore/QProcess>
|
||||
#include <QtGui/QSplashScreen>
|
||||
#include <QtGui/QHeaderView>
|
||||
#include <QtWidgets/QSplashScreen>
|
||||
#include <QtWidgets/QHeaderView>
|
||||
#include <QtGui/QSyntaxHighlighter>
|
||||
#include <QtCore/QSettings>
|
||||
#include <QtCore/QThread>
|
||||
#include <QtGui/QColorDialog>
|
||||
#include <QtGui/QInputDialog>
|
||||
#include <QtGui/QCheckBox>
|
||||
#include <QtGui/QPushButton>
|
||||
#include <QtGui/QStackedWidget>
|
||||
#include <QtWidgets/QColorDialog>
|
||||
#include <QtWidgets/QInputDialog>
|
||||
#include <QtWidgets/QCheckBox>
|
||||
#include <QtWidgets/QPushButton>
|
||||
#include <QtWidgets/QStackedWidget>
|
||||
#include <QtGui/QKeyEvent>
|
||||
#include <QtGui/QToolButton>
|
||||
#include <QtGui/QDialogButtonBox>
|
||||
#include <QtWidgets/QToolButton>
|
||||
#include <QtWidgets/QDialogButtonBox>
|
||||
#include <QtCore/QSignalMapper>
|
||||
#include <QtWinExtras/qwinfunctions.h>
|
||||
|
||||
#endif
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,15 @@
|
||||
RpcView
|
||||
=======
|
||||
|
||||
RpcView is a free tool to explore and decompile all RPC functionalities present on a Microsoft system.
|
||||
RpcView is an open-source tool to explore and decompile all RPC functionalities present on a Microsoft system.
|
||||
|
||||
You can get the last [official release](https://github.com/silverf0x/RpcView/releases).
|
||||
|
||||
Or you can download the last [automatically built release](https://ci.appveyor.com/project/silverf0x/rpcview/build/artifacts)
|
||||
|
||||
[](https://ci.appveyor.com/project/silverf0x/rpcview)
|
||||
|
||||
**Warning**: you have to install "Microsoft Visual C++ 2015 Redistributable" to use RpcView.
|
||||
|
||||
How to add a new RPC runtime
|
||||
----------------------------------
|
||||
@@ -25,11 +33,11 @@ Required elements to compiled the project:
|
||||
|
||||
* Visual Studio (currently Visual Studio 2015 community)
|
||||
* CMake (at least 3.0.2)
|
||||
* Qt4 (currently 4.8.6)
|
||||
* Qt5 (currently 5.9.1)
|
||||
|
||||
Before running CMake you have to set the CMAKE_PREFIX_PATH environment variable with the current Qt path, for instance:
|
||||
Before running CMake you have to set the CMAKE_PREFIX_PATH environment variable with the current Qt path, for instance (x64):
|
||||
```
|
||||
set CMAKE_PREFIX_PATH=C:\Qt\4.8.6
|
||||
set CMAKE_PREFIX_PATH=C:\Qt\Qt5.9.1\5.9.1\msvc2015_64
|
||||
```
|
||||
Then you can run CMake to produce the project solution.
|
||||
Here is an example to generate the x64 solution with Visual Studio 2015 from the ```RpcView/Build/x64``` directory:
|
||||
@@ -49,16 +57,6 @@ cmake -G"Visual Studio 14 2015 Win64" ../../
|
||||
-- Detecting CXX compile features
|
||||
-- Detecting CXX compile features - done
|
||||
[RpcView]
|
||||
-- Looking for Q_WS_X11
|
||||
-- Looking for Q_WS_X11 - not found
|
||||
-- Looking for Q_WS_WIN
|
||||
-- Looking for Q_WS_WIN - found
|
||||
-- Looking for Q_WS_QWS
|
||||
-- Looking for Q_WS_QWS - not found
|
||||
-- Looking for Q_WS_MAC
|
||||
-- Looking for Q_WS_MAC - not found
|
||||
-- Found Qt4: C:/Qt/4.8.6/bin/qmake.exe (found version "4.8.6")
|
||||
-- Target is 64 bits
|
||||
[RpcDecompiler]
|
||||
[RpcCore1_32bits]
|
||||
[RpcCore2_32bits]
|
||||
@@ -72,7 +70,11 @@ cmake -G"Visual Studio 14 2015 Win64" ../../
|
||||
-- Build files have been written to: C:/Dev/RpcView/Build/x64
|
||||
```
|
||||
|
||||
To produce the Win32 solution with Visual Studio 2015 from the ```RpcView/Build/x86``` directory:
|
||||
To produce the Win32 solution:
|
||||
```
|
||||
set CMAKE_PREFIX_PATH=C:\Qt\Qt5.9.1\5.9.1\msvc2015
|
||||
```
|
||||
Then from the ```RpcView/Build/x86``` directory:
|
||||
```cmake
|
||||
cmake -G"Visual Studio 14 2015" ../../
|
||||
-- The C compiler identification is MSVC 19.0.24215.1
|
||||
@@ -88,16 +90,6 @@ cmake -G"Visual Studio 14 2015" ../../
|
||||
-- Detecting CXX compile features
|
||||
-- Detecting CXX compile features - done
|
||||
[RpcView]
|
||||
-- Looking for Q_WS_X11
|
||||
-- Looking for Q_WS_X11 - not found
|
||||
-- Looking for Q_WS_WIN
|
||||
-- Looking for Q_WS_WIN - found
|
||||
-- Looking for Q_WS_QWS
|
||||
-- Looking for Q_WS_QWS - not found
|
||||
-- Looking for Q_WS_MAC
|
||||
-- Looking for Q_WS_MAC - not found
|
||||
-- Found Qt4: C:/Qt/4.8.6/bin/qmake.exe (found version "4.8.6")
|
||||
-- Target is 32 bits
|
||||
[RpcDecompiler]
|
||||
[RpcCore1_32bits]
|
||||
[RpcCore2_32bits]
|
||||
|
||||
+5
-2
@@ -170,7 +170,8 @@ End:
|
||||
|
||||
|
||||
typedef struct{
|
||||
BOOL bFound;
|
||||
BOOL bFound;
|
||||
PRPC_SERVER_T pRpcServer;
|
||||
}GetRpcServerAddressCallbackCtxt_T;
|
||||
|
||||
|
||||
@@ -193,7 +194,8 @@ BOOL WINAPI GetRpcServerAddressCallback(HANDLE hProcess, UINT Index, VOID PTR_T
|
||||
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))))
|
||||
(!memcmp(&RpcInterface.RpcServerInterface.TransferSyntax, &DceRpcSyntaxUuid, sizeof(DceRpcSyntaxUuid))) &&
|
||||
RpcInterface.pRpcServer == pGetRpcServerAddressCallbackCtxt->pRpcServer)
|
||||
{
|
||||
pGetRpcServerAddressCallbackCtxt->bFound = TRUE;
|
||||
*pbContinue=FALSE;
|
||||
@@ -242,6 +244,7 @@ BOOL WINAPI GetRpcServerAddressInProcess(DWORD Pid,RpcCoreInternalCtxt_T* pRpcCo
|
||||
{
|
||||
if (!ReadProcessMemory(hProcess,pCandidate,&pRpcServer,sizeof(VOID PTR_T),NULL)) goto NextCandidate;
|
||||
if (!ReadProcessMemory(hProcess,pRpcServer,&RpcServer,sizeof(RpcServer),NULL)) goto NextCandidate;
|
||||
GetRpcServerAddressCallbackCtxt.pRpcServer = pRpcServer;
|
||||
if (!EnumSimpleDict(hProcess,&RpcServer.InterfaceDict,&GetRpcServerAddressCallback,&GetRpcServerAddressCallbackCtxt)) goto End;
|
||||
if (GetRpcServerAddressCallbackCtxt.bFound==TRUE)
|
||||
{
|
||||
|
||||
@@ -13,7 +13,10 @@ static UINT64 RPC_CORE_RUNTIME_VERSION[] = {
|
||||
0x600011DB149E0LL, //6.1.7601.18912
|
||||
0x600011DB149F5LL, //6.1.7601.18933
|
||||
0x600011DB149FBLL, //6.1.7601.18939
|
||||
0x600011DB15B7BLL //6.1.7601.23419
|
||||
0x600011DB14ABFLL, //6.1.7601.19135
|
||||
0x600011DB15B7BLL, //6.1.7601.23419
|
||||
0x600011DB15CA2LL, //6.1.7601.23714
|
||||
0x600011DB15D6BLL, //6.1.7601.23915
|
||||
};
|
||||
|
||||
#ifdef _WIN64
|
||||
|
||||
@@ -12,7 +12,10 @@ static UINT64 RPC_CORE_RUNTIME_VERSION[] = {
|
||||
0x600011DB149E0LL, //6.1.7601.18912
|
||||
0x600011DB149F5LL, //6.1.7601.18933
|
||||
0x600011DB149FBLL, //6.1.7601.18939
|
||||
0x600011DB15B7BLL //6.1.7601.23419
|
||||
0x600011DB14ABFLL, //6.1.7601.19135
|
||||
0x600011DB15B7BLL, //6.1.7601.23419
|
||||
0x600011DB15CA2LL, //6.1.7601.23714
|
||||
0x600011DB15D6BLL, //6.1.7601.23915
|
||||
};
|
||||
|
||||
#define RPC_CORE_DESCRIPTION "Windows 7 SP1 64bits runtime core"
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
#include <windows.h>
|
||||
#include <Rpc.h>
|
||||
|
||||
|
||||
static UINT64 RPC_CORE_RUNTIME_VERSION[] = {
|
||||
0x6000324D70000LL, //6.3.9431.0000
|
||||
0x6000325804000LL, //6.3.9600.16384
|
||||
0x6000325804340LL, //6.3.9600.17216
|
||||
0x6000325804407LL, //6.3.9600.17415
|
||||
0x60003258045FFLL, //6.3.9600.17919
|
||||
0x6000325804774LL, //6.3.9600.18292
|
||||
|
||||
0xA000028004000LL, //10.0.10240.16384
|
||||
0xA00002800401CLL, //10.0.10240.16412
|
||||
@@ -25,6 +25,7 @@ static UINT64 RPC_CORE_RUNTIME_VERSION[] = {
|
||||
0xA00003AD702A2LL, //10.0.15063.674
|
||||
0xA00003F6803E8LL, //10.0.16232.1000
|
||||
0xA00003FAB000FLL, //10.0.16299.15
|
||||
0xA0000427903E8LL, //10.0.17017.1000
|
||||
};
|
||||
|
||||
#ifdef _WIN64
|
||||
|
||||
@@ -10,6 +10,7 @@ static UINT64 RPC_CORE_RUNTIME_VERSION[] = {
|
||||
0x6000325804340LL, //6.3.9600.17216
|
||||
0x6000325804407LL, //6.3.9600.17415
|
||||
0x60003258045FFLL, //6.3.9600.17919
|
||||
0x6000325804774LL, //6.3.9600.18292
|
||||
|
||||
0xA000028004000LL, //10.0.10240.16384
|
||||
0xA00002800401CLL, //10.0.10240.16412
|
||||
@@ -18,11 +19,13 @@ static UINT64 RPC_CORE_RUNTIME_VERSION[] = {
|
||||
0xA0000380603E8LL, //10.0.14342.1000
|
||||
0xA000038190000LL, //10.0.14361.0
|
||||
0xA000038390000LL, //10.0.14393.0
|
||||
0xA000038390052LL, //10.0.14393.82
|
||||
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
|
||||
0xA0000427903E8LL, //10.0.17017.1000
|
||||
};
|
||||
|
||||
#define RPC_CORE_DESCRIPTION "Windows 10 64bits runtime core"
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
//
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,0
|
||||
PRODUCTVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,0
|
||||
FILEVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,_RPCVIEW_VERSION_BUILD_
|
||||
PRODUCTVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,_RPCVIEW_VERSION_BUILD_
|
||||
FILEFLAGSMASK 0x0L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
||||
@@ -30,7 +30,7 @@ IdlInterface* IdlFunction::getpIdlInterface() const
|
||||
|
||||
size_t IdlFunction::getNbArguments() const
|
||||
{
|
||||
return (size_t)m_ProcHeader.oifheader.bNumber_of_params;
|
||||
return (size_t)m_ProcHeader.oifheader.number_of_param;
|
||||
}
|
||||
|
||||
bool IdlFunction::hasRangeOnConformance() const
|
||||
@@ -235,6 +235,7 @@ DECOMP_STATUS IdlFunction::decodeProcHeader(void* pCtx)
|
||||
|
||||
if(bResult == FALSE)
|
||||
{
|
||||
RPC_ERROR_FN("can not read explicit bind handle");
|
||||
return DS_ERR_UNABLE_TO_READ_MEMORY;
|
||||
}
|
||||
|
||||
@@ -244,7 +245,6 @@ DECOMP_STATUS IdlFunction::decodeProcHeader(void* pCtx)
|
||||
default:
|
||||
RPC_ERROR_FN("invalid explicit handle type\n");
|
||||
return DS_ERR_INVALID_DATA;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,6 +259,7 @@ DECOMP_STATUS IdlFunction::decodeProcHeader(void* pCtx)
|
||||
sizeof(this->m_ProcHeader.oifheader));
|
||||
|
||||
if (bResult == FALSE){
|
||||
RPC_ERROR_FN("can not read oif header\n");
|
||||
return DS_ERR_UNABLE_TO_READ_MEMORY; ;
|
||||
}
|
||||
|
||||
@@ -267,42 +268,45 @@ DECOMP_STATUS IdlFunction::decodeProcHeader(void* pCtx)
|
||||
//========================================================
|
||||
// Read Win32Ext header part of header
|
||||
//========================================================
|
||||
|
||||
// TODO : check under which condition win32Kext header is present
|
||||
bResult = RPC_GET_PROCESS_DATA2(
|
||||
(pRpcDecompilerCtxt->pRpcDecompilerInfo->pProcFormatString + uOffsetInProcFmtString),
|
||||
&(this->m_ProcHeader.win2KextHeader.extension_version),
|
||||
sizeof(this->m_ProcHeader.win2KextHeader.extension_version));
|
||||
|
||||
if (bResult == FALSE){
|
||||
return DS_ERR_UNABLE_TO_READ_MEMORY; ;
|
||||
}
|
||||
|
||||
|
||||
switch (this->m_ProcHeader.win2KextHeader.extension_version)
|
||||
if (this->m_ProcHeader.oifheader.interpreter_opt_flag.HasExtensions)
|
||||
{
|
||||
case WIN2K_EXT_HEADER_32B_SIZE:
|
||||
bResult = RPC_GET_PROCESS_DATA2(
|
||||
(pRpcDecompilerCtxt->pRpcDecompilerInfo->pProcFormatString + uOffsetInProcFmtString),
|
||||
&(this->m_ProcHeader.win2KextHeader.extension_version),
|
||||
WIN2K_EXT_HEADER_32B_SIZE
|
||||
);
|
||||
sizeof(this->m_ProcHeader.win2KextHeader.extension_version));
|
||||
|
||||
uOffsetInProcFmtString += WIN2K_EXT_HEADER_32B_SIZE;
|
||||
if (bResult == FALSE){
|
||||
RPC_ERROR_FN("can not read win32ext header\n");
|
||||
return DS_ERR_UNABLE_TO_READ_MEMORY;
|
||||
}
|
||||
|
||||
break;
|
||||
case WIN2K_EXT_HEADER_64B_SIZE:
|
||||
bResult = RPC_GET_PROCESS_DATA2(
|
||||
(pRpcDecompilerCtxt->pRpcDecompilerInfo->pProcFormatString + uOffsetInProcFmtString),
|
||||
&(this->m_ProcHeader.win2KextHeader.extension_version),
|
||||
WIN2K_EXT_HEADER_64B_SIZE
|
||||
);
|
||||
|
||||
uOffsetInProcFmtString += WIN2K_EXT_HEADER_64B_SIZE;
|
||||
break;
|
||||
switch (this->m_ProcHeader.win2KextHeader.extension_version)
|
||||
{
|
||||
case WIN2K_EXT_HEADER_32B_SIZE:
|
||||
bResult = RPC_GET_PROCESS_DATA2(
|
||||
(pRpcDecompilerCtxt->pRpcDecompilerInfo->pProcFormatString + uOffsetInProcFmtString),
|
||||
&(this->m_ProcHeader.win2KextHeader.extension_version),
|
||||
WIN2K_EXT_HEADER_32B_SIZE
|
||||
);
|
||||
|
||||
default:
|
||||
return DS_ERR_INVALID_DATA;
|
||||
uOffsetInProcFmtString += WIN2K_EXT_HEADER_32B_SIZE;
|
||||
|
||||
break;
|
||||
case WIN2K_EXT_HEADER_64B_SIZE:
|
||||
bResult = RPC_GET_PROCESS_DATA2(
|
||||
(pRpcDecompilerCtxt->pRpcDecompilerInfo->pProcFormatString + uOffsetInProcFmtString),
|
||||
&(this->m_ProcHeader.win2KextHeader.extension_version),
|
||||
WIN2K_EXT_HEADER_64B_SIZE
|
||||
);
|
||||
|
||||
uOffsetInProcFmtString += WIN2K_EXT_HEADER_64B_SIZE;
|
||||
break;
|
||||
|
||||
default:
|
||||
RPC_ERROR_FN("invalid win32k header len");
|
||||
return DS_ERR_INVALID_DATA;
|
||||
}
|
||||
}
|
||||
|
||||
m_uOffsetFirstArg = uOffsetInProcFmtString;
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
//
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,0
|
||||
PRODUCTVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,0
|
||||
FILEVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_, _RPCVIEW_VERSION_BUILD_
|
||||
PRODUCTVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_, _RPCVIEW_VERSION_BUILD_
|
||||
FILEFLAGSMASK 0x0L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
||||
@@ -242,7 +242,7 @@ typedef struct Oif_Header_t
|
||||
as the SERVER_MUST_SIZE flag triggers the sizing. */
|
||||
INTERPRETER_OPT_FLAGS interpreter_opt_flag; // Voir interpreter_opt_flag values
|
||||
unsigned char number_of_param; // Nombre de paramètres décrits de la procédure, return compris
|
||||
}Oif_Header_t;
|
||||
}Oif_Header_t, OIF_HEADER_T;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// _MIDL_PROC_FORMAT_STRING types :
|
||||
@@ -324,15 +324,6 @@ typedef struct _OI_HEADER_T
|
||||
OI_HEADER_END_T end;
|
||||
}OI_HEADER_T;
|
||||
|
||||
// Oif fields
|
||||
typedef struct _OIF_HEADER_T
|
||||
{
|
||||
WORD wConstant_client_buffer_size;
|
||||
WORD wConstant_server_buffer_size;
|
||||
BYTE bINTERPRETER_OPT_FLAGS;
|
||||
BYTE bNumber_of_params;
|
||||
}OIF_HEADER_T;
|
||||
|
||||
//
|
||||
// Procedure header
|
||||
typedef struct _PROC_HEADER_T
|
||||
|
||||
@@ -248,7 +248,7 @@ BOOL __fastcall RpcDecompilerDecodeAndPrintPrototypeReturnType(
|
||||
);
|
||||
|
||||
currentOffset += sizeof(Oi_Header_RpcFlags_t);
|
||||
RPC_DEBUG_FN((UCHAR*)"\noiHeaderRpcFlagsToDecode->rpc_flags = 0x%x", oiHeaderRpcFlagsToDecode->rpc_flags);
|
||||
//RPC_DEBUG_FN((UCHAR*)"\noiHeaderRpcFlagsToDecode->rpc_flags = 0x%x", oiHeaderRpcFlagsToDecode->rpc_flags);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+7
-11
@@ -10,8 +10,8 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
# Find the QtWidgets library
|
||||
# set CMAKE_PREFIX_PATH=c:\Qt\4.8.6
|
||||
find_package(Qt4 REQUIRED QtGui QtCore)
|
||||
# set CMAKE_PREFIX_PATH=C:\Qt\Qt5.9.1\5.9.1\msvc2015 or c:\Qt\Qt5.9.1\5.9.1\msvc2015_64
|
||||
find_package(Qt5Widgets)
|
||||
|
||||
add_executable(
|
||||
RpcView
|
||||
@@ -43,12 +43,8 @@ add_executable(
|
||||
RpcViewResource.rc
|
||||
)
|
||||
|
||||
if(${CMAKE_GENERATOR} MATCHES "Win64")
|
||||
message(STATUS "Target is 64 bits")
|
||||
target_link_libraries(RpcView ../../../Qt/lib/x64/QtGui ../../../Qt/lib/x64/QtCore)
|
||||
target_link_libraries(RpcView Qt4::QtGui Qt4::QtCore)
|
||||
else(${CMAKE_GENERATOR} MATCHES "Win64")
|
||||
message(STATUS "Target is 32 bits")
|
||||
target_link_libraries(RpcView ../../../Qt/lib/x86/QtGui ../../../Qt/lib/x86/QtCore)
|
||||
target_link_libraries(RpcView Qt4::QtGui Qt4::QtCore)
|
||||
endif(${CMAKE_GENERATOR} MATCHES "Win64")
|
||||
# Disable compiler warnings:
|
||||
# C4091 in ShlObj.h and Dbghelp.h
|
||||
# C4127 (conditional expression is constant) in qt headers
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/wd4091 /wd4127")
|
||||
target_link_libraries(RpcView Qt5::Widgets $ENV{CMAKE_PREFIX_PATH}/lib/Qt5WinExtras.lib)
|
||||
@@ -89,6 +89,7 @@ void ConfigurationVisitor_C::Visit(InterfaceInfoWidget_C* pInterfaceInfoWidget)
|
||||
void ConfigurationVisitor_C::Visit(ProcessInfoWidget_C* pProcessInfoWidget)
|
||||
{
|
||||
//nothing to do here
|
||||
UNREFERENCED_PARAMETER(pProcessInfoWidget);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -10,10 +10,10 @@ void DecompilationWidget_C::InsertText(const char* Txt)
|
||||
{
|
||||
/*
|
||||
pTextEdit->moveCursor(QTextCursor::End);
|
||||
pTextEdit->append( QString::fromAscii(Txt) );
|
||||
pTextEdit->append( QString::fromLatin1(Txt) );
|
||||
pTextEdit->ensureCursorVisible();
|
||||
*/
|
||||
pTextEdit->setText( QString::fromAscii(Txt) );
|
||||
pTextEdit->setText( QString::fromLatin1(Txt) );
|
||||
pTextEdit->ensureCursorVisible();
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ DecompilationWidget_C::DecompilationWidget_C(QWidget *parent) : QDockWidget(Widg
|
||||
{
|
||||
QFont font;
|
||||
|
||||
UNREFERENCED_PARAMETER(parent);
|
||||
setObjectName(WidgetName);
|
||||
|
||||
font.setFamily("Courier");
|
||||
|
||||
@@ -26,6 +26,7 @@ EndpointSelectedVisitor_C::EndpointSelectedVisitor_C(quint32 Pid,RpcCore_T* pRpc
|
||||
void EndpointSelectedVisitor_C::Visit(EndpointsWidget_C* pEndpointsWidget)
|
||||
{
|
||||
//nothing to do here
|
||||
UNREFERENCED_PARAMETER(pEndpointsWidget);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -85,6 +85,8 @@ bool EndpointsWidget_C::IsEndpointsPresent(quint32 Pid, WCHAR* pName,WCHAR* pPro
|
||||
QList<QStandardItem*> ItemList;
|
||||
bool bResult = false;
|
||||
|
||||
UNREFERENCED_PARAMETER(Pid);
|
||||
|
||||
ItemList = pModel->findItems(QString::fromUtf16((const ushort*)pName), Qt::MatchFixedString, Column_Name);
|
||||
if (ItemList.isEmpty()) goto End;
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ typedef struct _EnumCtxt_T{
|
||||
//------------------------------------------------------------------------------
|
||||
static BOOL WINAPI EnumProc(DWORD Pid, DWORD Ppid, EnumCtxt_T* pEnumCtxt, BOOL* pbContinue)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pbContinue);
|
||||
ProcessEntry_C* pProcessEntry = new ProcessEntry_C(Ppid,Pid);
|
||||
|
||||
pEnumCtxt->pInitViewsVisitor->ProcessVector.push_back(pProcessEntry);
|
||||
@@ -126,6 +127,7 @@ void InitViewsVisitor_C::Visit(InterfacesWidget_C* pInterfacesWidget)
|
||||
void InitViewsVisitor_C::Visit(InterfaceInfoWidget_C* pInterfaceInfoWidget)
|
||||
{
|
||||
//nothing to do here
|
||||
UNREFERENCED_PARAMETER(pInterfaceInfoWidget);
|
||||
}
|
||||
|
||||
|
||||
@@ -133,6 +135,7 @@ void InitViewsVisitor_C::Visit(InterfaceInfoWidget_C* pInterfaceInfoWidget)
|
||||
void InitViewsVisitor_C::Visit(ProcessInfoWidget_C* pProcessInfoWidget)
|
||||
{
|
||||
//nothing to do here
|
||||
UNREFERENCED_PARAMETER(pProcessInfoWidget);
|
||||
}
|
||||
|
||||
|
||||
@@ -140,6 +143,7 @@ void InitViewsVisitor_C::Visit(ProcessInfoWidget_C* pProcessInfoWidget)
|
||||
void InitViewsVisitor_C::Visit(ProceduresWidget_C* pProceduresWidget)
|
||||
{
|
||||
//nothing to do here
|
||||
UNREFERENCED_PARAMETER(pProceduresWidget);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -158,15 +158,15 @@ End:
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void InterfaceInfoWidget_C::SetAddressRepresentation(AddressRepresentation_T AddressRepresentation)
|
||||
void InterfaceInfoWidget_C::SetAddressRepresentation(AddressRepresentation_T AddrRepresentation)
|
||||
{
|
||||
this->AddressRepresentation = AddressRepresentation;
|
||||
this->AddressRepresentation = AddrRepresentation;
|
||||
|
||||
pCallbackAddress->setText("");
|
||||
pTypeFormatString->setText("");
|
||||
pProcFormatString->setText("");
|
||||
pExpressionEvaluation->setText("");
|
||||
switch (AddressRepresentation)
|
||||
switch (AddrRepresentation)
|
||||
{
|
||||
case AddressRepresentation_RVA:
|
||||
if ((IfCallback != 0) && (IfCallback!=INVALID_IF_CALLBACK_ADDRESS)) pCallbackAddress->setText(QString("+0x%1").arg(IfCallback - Base, 8, 16, QLatin1Char('0')));
|
||||
@@ -198,6 +198,8 @@ void InterfaceInfoWidget_C::AcceptVisitor(ViewVisitor_C* pVisitor)
|
||||
//------------------------------------------------------------------------------
|
||||
InterfaceInfoWidget_C::InterfaceInfoWidget_C(QWidget* pParent):QDockWidget(WidgetName)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pParent);
|
||||
|
||||
this->Pid = 0;
|
||||
|
||||
setObjectName(WidgetName);
|
||||
|
||||
@@ -43,6 +43,7 @@ void InterfaceSelectedVisitor_C::Visit(EndpointsWidget_C* pEndpointsWidget)
|
||||
void InterfaceSelectedVisitor_C::Visit(InterfacesWidget_C* pInterfacesWidget)
|
||||
{
|
||||
//nothing todo
|
||||
UNREFERENCED_PARAMETER(pInterfacesWidget);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -119,9 +120,7 @@ void InterfaceSelectedVisitor_C::Visit(ProceduresWidget_C* pProceduresWidget)
|
||||
WCHAR SymbolName[RPC_MAX_LENGTH];
|
||||
ULONG ProcIdx;
|
||||
VOID* ProcFormat = NULL;
|
||||
LPCWSTR pProcName = NULL;
|
||||
VOID* hPdb = NULL;
|
||||
UCHAR* ProcAddress = NULL;
|
||||
|
||||
if (pRpcInterfaceInfo==NULL) goto End;
|
||||
pProceduresWidget->reset(pRpcInterfaceInfo->Pid);
|
||||
|
||||
@@ -51,10 +51,10 @@ void InterfacesWidget_C::InterfaceSelected(const QModelIndex& Index)
|
||||
RPC_IF_ID RpcIfId;
|
||||
UCHAR* pUuidStringA;
|
||||
|
||||
QString& PidString = pProxyModel->data( pProxyModel->index(Index.row(), Column_Pid) ).toString();
|
||||
pUuidStringA = (UCHAR*)pProxyModel->data( pProxyModel->index(Index.row(), Column_Uuid) ).toString().toLatin1().data();
|
||||
QString& VersionString = pProxyModel->data( pProxyModel->index(Index.row(), Column_Version) ).toString();
|
||||
VersionStringList = VersionString.split(".", QString::SkipEmptyParts, Qt::CaseSensitive);
|
||||
QString PidString = pProxyModel->data( pProxyModel->index(Index.row(), Column_Pid) ).toString();
|
||||
pUuidStringA = (UCHAR*)pProxyModel->data( pProxyModel->index(Index.row(), Column_Uuid) ).toString().toLatin1().data();
|
||||
QString VersionString = pProxyModel->data( pProxyModel->index(Index.row(), Column_Version) ).toString();
|
||||
VersionStringList = VersionString.split(".", QString::SkipEmptyParts, Qt::CaseSensitive);
|
||||
|
||||
if (VersionStringList.isEmpty())
|
||||
{
|
||||
@@ -129,7 +129,7 @@ bool InterfacesWidget_C::IsInterfacePresent(quint32 Pid, RPC_IF_ID* pIfId)
|
||||
|
||||
if ( UuidToStringA(&pIfId->Uuid,&pUuidString)!=RPC_S_OK ) goto End;
|
||||
|
||||
ItemList = pModel->findItems(QString::fromAscii((const char*)pUuidString), Qt::MatchFixedString, Column_Uuid);
|
||||
ItemList = pModel->findItems(QString::fromLatin1((const char*)pUuidString), Qt::MatchFixedString, Column_Uuid);
|
||||
if (ItemList.isEmpty()) goto End;
|
||||
|
||||
for (auto Iter=ItemList.begin();Iter!=ItemList.end();Iter++)
|
||||
@@ -248,7 +248,6 @@ bool InterfacesWidget_C::AddInterfaces(RpcInterfaceInfo_T* pRpcInterfaceInfo)
|
||||
int Index;
|
||||
QString PidString;
|
||||
WCHAR* pUuidString = NULL;
|
||||
WCHAR* pTransfertSyntaxString = NULL;
|
||||
WCHAR* pTypeW = NULL;
|
||||
WCHAR* pStubW = NULL;
|
||||
|
||||
@@ -324,7 +323,7 @@ bool InterfacesWidget_C::AddInterfaces(RpcInterfaceInfo_T* pRpcInterfaceInfo)
|
||||
if (pRpcInterfaceInfo->LocationState & MEM_FREE) SetRowColor(Index, QColor(200, 200, 200, 180));
|
||||
|
||||
if (!memcmp(&pRpcInterfaceInfo->TransfertSyntax,&DceRpcSyntaxUuid,sizeof(DceRpcSyntaxUuid)))
|
||||
pModel->setData(pModel->index(Index, Column_TransfertSyntax), QString::fromAscii("DCE"));
|
||||
pModel->setData(pModel->index(Index, Column_TransfertSyntax), QString::fromLatin1("DCE"));
|
||||
else if (!memcmp(&pRpcInterfaceInfo->TransfertSyntax,&Ndr64SyntaxUuid,sizeof(Ndr64SyntaxUuid)))
|
||||
pModel->setData(pModel->index(Index, Column_TransfertSyntax), QString::fromUtf16((const ushort*)L"NDR64"));
|
||||
else
|
||||
@@ -396,9 +395,9 @@ void InterfacesWidget_C::UpdateColumnsVisibility()
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void InterfacesWidget_C::SetAddressRepresentation(AddressRepresentation_T AddressRepresentation)
|
||||
void InterfacesWidget_C::SetAddressRepresentation(AddressRepresentation_T AddrRepresentation)
|
||||
{
|
||||
switch (AddressRepresentation)
|
||||
switch (AddrRepresentation)
|
||||
{
|
||||
case AddressRepresentation_RVA:
|
||||
for (int i = 0; i < pModel->rowCount(); i++)
|
||||
|
||||
+23
-22
@@ -132,7 +132,7 @@ bool MainWindow_C::eventFilter(QObject* pObject, QEvent* pEvent)
|
||||
{
|
||||
if (pEvent->type() == QEvent::ContextMenu)
|
||||
{
|
||||
QPoint& position = QCursor::pos();
|
||||
QPoint position = QCursor::pos();
|
||||
//
|
||||
// Show the context menu associatd to columns
|
||||
//
|
||||
@@ -207,8 +207,9 @@ VOID __cdecl RpcPrint(void* pContext, const char* pTxt)
|
||||
VOID __cdecl RpcDebug(const char* pFunction, ULONG Line, const char* pFormatString, ...)
|
||||
{
|
||||
va_list Arg;
|
||||
va_start(Arg, pFormatString);
|
||||
|
||||
UNREFERENCED_PARAMETER(pFunction);
|
||||
UNREFERENCED_PARAMETER(Line);
|
||||
va_start(Arg, pFormatString);
|
||||
_vcprintf(pFormatString, Arg);
|
||||
}
|
||||
|
||||
@@ -384,7 +385,8 @@ void MainWindow_C::SendVisitor(ViewVisitor_C& Visitor)
|
||||
//------------------------------------------------------------------------------
|
||||
void MainWindow_C::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
Exit();
|
||||
UNREFERENCED_PARAMETER(event);
|
||||
Exit();
|
||||
}
|
||||
|
||||
|
||||
@@ -447,7 +449,7 @@ void MainWindow_C::ConfigureSymbols()
|
||||
if ( bOk )
|
||||
{
|
||||
pSettings->setValue("SymbolsPath",NewSymbolsPath);
|
||||
SetEnvironmentVariableA("RpcViewSymbolPath",NewSymbolsPath.toAscii());
|
||||
SetEnvironmentVariableA("RpcViewSymbolPath",NewSymbolsPath.toLatin1());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -554,15 +556,15 @@ void MainWindow_C::SetupMenu()
|
||||
//
|
||||
QMenu* pMenuFile = pMenuBar->addMenu("&File");
|
||||
QAction* pActionAllProcessesDetails = pMenuFile->addAction("Show &Details for All Processes",this,SLOT(ViewDetailsForAllProcesses()));
|
||||
QAction* pActionFileExit = pMenuFile->addAction("E&xit",this,SLOT(Exit()));
|
||||
pMenuFile->addAction("E&xit",this,SLOT(Exit()));
|
||||
//
|
||||
// Option
|
||||
//
|
||||
QMenu* pMenuOptions = pMenuBar->addMenu("&Options");
|
||||
QAction* pActionConfigureSymbols = pMenuOptions->addAction("Configure Sym&bols",this,SLOT(ConfigureSymbols()));
|
||||
pMenuOptions->addAction("Configure Sym&bols",this,SLOT(ConfigureSymbols()));
|
||||
QMenu* pSubMenupdateSpeed = pMenuOptions->addMenu("&Refresh Speed");
|
||||
QAction* pActionRefresh = pMenuOptions->addAction("Refresh &Now", this, SLOT(RefreshViews()));
|
||||
QAction* pActionViewSelectColumns = pMenuOptions->addAction("Select Col&umns", this, SLOT(ShowColumnsDialog()));
|
||||
pMenuOptions->addAction("Select Col&umns", this, SLOT(ShowColumnsDialog()));
|
||||
QMenu* pSubMenuAddress = pMenuOptions->addMenu("&Address");
|
||||
pActionRefresh->setShortcut(Qt::Key_F5);
|
||||
|
||||
@@ -616,9 +618,9 @@ void MainWindow_C::SetupMenu()
|
||||
// Filter
|
||||
//
|
||||
QMenu* pMenuFilter = pMenuBar->addMenu("Fil&ter");
|
||||
QAction* pActionFilterProcesses = pMenuFilter->addAction("&Process", this, SLOT(FilterProcesses()));
|
||||
QAction* pActionFilterEndpoints = pMenuFilter->addAction("&Endpoints", this, SLOT(FilterEndpoints()));
|
||||
QAction* pActionFilterInterfaces = pMenuFilter->addAction("&Interfaces", this, SLOT(FilterInterfaces()));
|
||||
pMenuFilter->addAction("&Process", this, SLOT(FilterProcesses()));
|
||||
pMenuFilter->addAction("&Endpoints", this, SLOT(FilterEndpoints()));
|
||||
pMenuFilter->addAction("&Interfaces", this, SLOT(FilterInterfaces()));
|
||||
//
|
||||
// Help
|
||||
//
|
||||
@@ -628,15 +630,15 @@ void MainWindow_C::SetupMenu()
|
||||
//--
|
||||
pMenuHelp->addSeparator();
|
||||
//--
|
||||
QAction* pActionAbout = pMenuHelp->addAction("&About", this, SLOT(About()));
|
||||
pActionAboutQt = pMenuHelp->addAction("About &Qt", qApp, SLOT(aboutQt()));
|
||||
pMenuHelp->addAction("&About", this, SLOT(About()));
|
||||
pMenuHelp->addAction("About &Qt", qApp, SLOT(aboutQt()));
|
||||
|
||||
if (IsUserAnAdmin()) pActionAllProcessesDetails->setEnabled(false);
|
||||
|
||||
hUacIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_UAC_ICON));
|
||||
if (hUacIcon!=NULL)
|
||||
{
|
||||
pActionAllProcessesDetails->setIcon(QPixmap::fromWinHICON(hUacIcon));
|
||||
pActionAllProcessesDetails->setIcon(QtWin::fromHICON(hUacIcon));
|
||||
DestroyIcon(hUacIcon);
|
||||
}
|
||||
setMenuBar(pMenuBar);
|
||||
@@ -729,12 +731,11 @@ MainWindow_C::MainWindow_C(RpcCore_T* pRpcCore)
|
||||
|
||||
setStatusBar(&StatusBar);
|
||||
|
||||
HANDLE hIcon = LoadImageA(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MAIN_ICON), IMAGE_ICON, 0, 0, 0);
|
||||
|
||||
QFont font("Helvetica", 20, QFont::Bold);
|
||||
#ifndef _DEBUG
|
||||
QSplashScreen SplashScreen(QPixmap::fromWinHICON((HICON)hIcon),Qt::WindowStaysOnTopHint);
|
||||
HANDLE hIcon = LoadImageA(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MAIN_ICON), IMAGE_ICON, 0, 0, 0);
|
||||
QSplashScreen SplashScreen(QtWin::fromHICON((HICON)hIcon),Qt::WindowStaysOnTopHint);
|
||||
SplashScreen.showMessage(QString("RpcView"), Qt::AlignCenter, QColor(Qt::lightGray));
|
||||
QFont font("Helvetica", 20, QFont::Bold);
|
||||
SplashScreen.setFont(font);
|
||||
SplashScreen.show();
|
||||
#endif
|
||||
@@ -780,12 +781,12 @@ MainWindow_C::MainWindow_C(RpcCore_T* pRpcCore)
|
||||
|
||||
restoreGeometry( pSettings->value("MainWindow/geometry").toByteArray() );
|
||||
restoreState( pSettings->value("MainWindow/windowState").toByteArray() );
|
||||
ConfigurationVisitor_C ConfigurationVisitor(ConfigurationVisitor_C::Load,pSettings);
|
||||
SendVisitor(ConfigurationVisitor);
|
||||
ConfigurationVisitor_C ConfigurationVisitorLoad(ConfigurationVisitor_C::Load,pSettings);
|
||||
SendVisitor(ConfigurationVisitorLoad);
|
||||
if (AddressRepresentation == AddressRepresentation_RVA)
|
||||
{
|
||||
ConfigurationVisitor_C ConfigurationVisitor(ConfigurationVisitor_C::AddressRVA, pSettings);
|
||||
SendVisitor(ConfigurationVisitor);
|
||||
ConfigurationVisitor_C ConfigurationVisitorAddr(ConfigurationVisitor_C::AddressRVA, pSettings);
|
||||
SendVisitor(ConfigurationVisitorAddr);
|
||||
}
|
||||
|
||||
SetEnvironmentVariableA( "RpcViewSymbolPath",pSettings->value("SymbolsPath").toByteArray() );
|
||||
|
||||
@@ -81,7 +81,6 @@ private:
|
||||
QAction* pActionViewProcedures;
|
||||
QAction* pActionViewInterfaceInfo;
|
||||
QAction* pActionViewProcessInfo;
|
||||
QAction* pActionAboutQt;
|
||||
QAction* pActionSpeedFast;
|
||||
QAction* pActionSpeedNormal;
|
||||
QAction* pActionSpeedBelowNormal;
|
||||
|
||||
@@ -20,9 +20,9 @@ QString GetProceduresWidgetColumName(ProceduresWigetColumn_T ProceduresWigetColu
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void ProceduresWidget_C::reset(ULONG Pid)
|
||||
void ProceduresWidget_C::reset(ULONG pid)
|
||||
{
|
||||
this->Pid = Pid;
|
||||
this->Pid = pid;
|
||||
pProcedures->clear();
|
||||
}
|
||||
|
||||
@@ -82,14 +82,14 @@ bool ProceduresWidget_C::AddProcedure(quint32 ProcIdx, WCHAR* pSymbolName, VOID*
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void ProceduresWidget_C::SetAddressRepresentation(AddressRepresentation_T AddressRepresentation)
|
||||
void ProceduresWidget_C::SetAddressRepresentation(AddressRepresentation_T AddrRepresentation)
|
||||
{
|
||||
QTreeWidgetItem* pProcedure;
|
||||
quintptr AbsoluteAddr;
|
||||
|
||||
this->AddressRepresentation = AddressRepresentation;
|
||||
this->AddressRepresentation = AddrRepresentation;
|
||||
|
||||
switch (AddressRepresentation)
|
||||
switch (AddrRepresentation)
|
||||
{
|
||||
case AddressRepresentation_RVA:
|
||||
for (int i = 0; i < pProcedures->topLevelItemCount(); i++)
|
||||
|
||||
@@ -122,7 +122,7 @@ void ProcessInfoWidget_C::UpdateProcessInfo(RpcProcessInfo_T* pRpcProcessInfo)
|
||||
|
||||
if (pRpcProcessInfo->hIcon!=NULL)
|
||||
{
|
||||
pIconLabel->setPixmap( QPixmap::fromWinHICON( pRpcProcessInfo->hIcon ) );
|
||||
pIconLabel->setPixmap( QtWin::fromHICON( pRpcProcessInfo->hIcon ) );
|
||||
pIconLabel->show();
|
||||
DestroyIcon( pRpcProcessInfo->hIcon );
|
||||
}
|
||||
@@ -178,6 +178,9 @@ void ProcessInfoWidget_C::AcceptVisitor(ViewVisitor_C* pVisitor)
|
||||
//------------------------------------------------------------------------------
|
||||
ProcessInfoWidget_C::ProcessInfoWidget_C(QWidget* pParent):QDockWidget(WidgetName)
|
||||
{
|
||||
|
||||
UNREFERENCED_PARAMETER(pParent);
|
||||
|
||||
setObjectName(WidgetName);
|
||||
|
||||
pTabWidget = new QTabWidget(this);
|
||||
|
||||
@@ -146,6 +146,8 @@ void ProcessWidget_C::ProcessSelected(QTreeWidgetItem* pItem, int Column)
|
||||
{
|
||||
quint32 Pid;
|
||||
|
||||
UNREFERENCED_PARAMETER(Column);
|
||||
|
||||
Pid = pItem->data(Column_Pid,0).toInt();
|
||||
emit ProcessSelected(Pid);
|
||||
}
|
||||
@@ -249,7 +251,7 @@ bool ProcessWidget_C::AddProcess(RpcProcessInfo_T* pRpcProcessInfo)
|
||||
|
||||
if ( pRpcProcessInfo->hIcon!=NULL )
|
||||
{
|
||||
AddProcessItem(pProcess,Index,Column_Name, Qt::DecorationRole, QIcon( QPixmap::fromWinHICON( pRpcProcessInfo->hIcon ) ) );
|
||||
AddProcessItem(pProcess,Index,Column_Name, Qt::DecorationRole, QIcon( QtWin::fromHICON( pRpcProcessInfo->hIcon ) ) );
|
||||
DestroyIcon( pRpcProcessInfo->hIcon );
|
||||
}
|
||||
|
||||
@@ -346,6 +348,8 @@ void ProcessWidget_C::LoadConfiguration(QSettings* pSettings)
|
||||
//------------------------------------------------------------------------------
|
||||
void ProcessWidget_C::InitProcessTreeWidget(QWidget* pParent)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pParent);
|
||||
|
||||
pProcessTree = new QTreeWidget(this);
|
||||
|
||||
QTreeWidgetItem* pHeaderItem = pProcessTree->headerItem();
|
||||
@@ -374,6 +378,7 @@ void ProcessWidget_C::InitProcessTreeWidget(QWidget* pParent)
|
||||
//------------------------------------------------------------------------------
|
||||
void ProcessWidget_C::InitProcessTreeView(QWidget* pParent)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pParent);
|
||||
pProxyModel = new QSortFilterProxyModel(this);
|
||||
pProxyModel->setDynamicSortFilter(true);
|
||||
pProxyModel->setFilterKeyColumn(Column_Pid);
|
||||
@@ -493,6 +498,8 @@ void ProcessWidget_C::UpdateColumnsVisibility()
|
||||
// Switch to the view header
|
||||
void ProcessWidget_C::TreeHeaderClicked(int logicalIndex)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(logicalIndex);
|
||||
|
||||
if (pStackedWidget->currentWidget()!=pProcessView)
|
||||
{
|
||||
pStackedWidget->setCurrentWidget(pProcessView);
|
||||
@@ -527,8 +534,6 @@ void ProcessWidget_C::ViewHeaderClicked(int logicalIndex)
|
||||
//------------------------------------------------------------------------------
|
||||
ProcessWidget_C::ProcessWidget_C(QWidget* pParent):QGroupBox(WidgetName)
|
||||
{
|
||||
QGridLayout* pGridLayout;
|
||||
|
||||
setObjectName(WidgetName);
|
||||
|
||||
pStackedWidget = new QStackedWidget(this);
|
||||
|
||||
@@ -23,6 +23,7 @@ typedef struct _EnumCtxt_T{
|
||||
//------------------------------------------------------------------------------
|
||||
static BOOL WINAPI EnumProc(DWORD Pid, DWORD Ppid, EnumCtxt_T* pEnumCtxt, BOOL* pbContinue)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pbContinue);
|
||||
ProcessEntry_C* pProcessEntry = new ProcessEntry_C(Ppid,Pid);
|
||||
|
||||
pEnumCtxt->pRefreshVisitor->ProcessVector.push_back(pProcessEntry);
|
||||
@@ -189,6 +190,7 @@ void RefreshVisitor_C::Visit(InterfacesWidget_C* pInterfacesWidget)
|
||||
void RefreshVisitor_C::Visit(InterfaceInfoWidget_C* pInterfaceInfoWidget)
|
||||
{
|
||||
//nothing to do here
|
||||
UNREFERENCED_PARAMETER(pInterfaceInfoWidget);
|
||||
}
|
||||
|
||||
|
||||
@@ -210,6 +212,7 @@ void RefreshVisitor_C::Visit(ProcessInfoWidget_C* pProcessInfoWidget)
|
||||
void RefreshVisitor_C::Visit(ProceduresWidget_C* pProceduresWidget)
|
||||
{
|
||||
//nothing to do
|
||||
UNREFERENCED_PARAMETER(pProceduresWidget);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ BOOL NTAPI LoadCoreEngine(RpcCore_T** ppRpcCoreHelper, void** ppRpcCoreCtxt, BOO
|
||||
hLib = LoadLibraryA(Win32FindData.cFileName);
|
||||
if (hLib != NULL)
|
||||
{
|
||||
pRpcCoreHelper = (RpcCore_T*)GetProcAddress(hLib, RPC_CORE_EXPORT_SYMBOL);
|
||||
pRpcCoreHelper = (RpcCore_T*)(ULONG_PTR)GetProcAddress(hLib, RPC_CORE_EXPORT_SYMBOL);
|
||||
if (pRpcCoreHelper != NULL)
|
||||
{
|
||||
*ppRpcCoreCtxt = pRpcCoreHelper->RpcCoreInitFn();
|
||||
@@ -66,13 +66,10 @@ BOOL NTAPI LoadCoreEngine(RpcCore_T** ppRpcCoreHelper, void** ppRpcCoreCtxt, BOO
|
||||
pRpcCoreHelper->RpcCoreUninitFn(*ppRpcCoreCtxt);
|
||||
if (bWow64Helper == pRpcCoreHelper->bWow64Helper)
|
||||
{
|
||||
// Version.As64BitsValue = pRpcCoreHelper->RuntimeVersion;
|
||||
_cprintf("RpcCore : %s\n", Win32FindData.cFileName);
|
||||
// _cprintf("Version : %I64X (%u.%u.%u.%u)\n", Version.As64BitsValue, Version.As16BitsValues.Part4, Version.As16BitsValues.Part3, Version.As16BitsValues.Part2, Version.As16BitsValues.Part1);
|
||||
_cprintf("Helper : 0x%p\n", pRpcCoreHelper);
|
||||
_cprintf("Wow64 : ");
|
||||
if (pRpcCoreHelper->bWow64Helper) _cprintf("TRUE\n"); else _cprintf("FALSE\n");
|
||||
// _cprintf("Description: %s\n\n", pRpcCoreHelper->pDescription);
|
||||
*ppRpcCoreHelper = pRpcCoreHelper;
|
||||
bResult = TRUE;
|
||||
goto End;
|
||||
@@ -112,17 +109,14 @@ VOID* __fastcall RpcCoreInit()
|
||||
}
|
||||
pRpcCoreManager->pNativeCoreCtxt = pRpcCoreManager->pNativeCore->RpcCoreInitFn();
|
||||
#ifdef _WIN64
|
||||
if (!LoadCoreEngine(&pRpcCoreManager->pWow64Core, &pRpcCoreManager->pWow64CoreCtxt, TRUE)) goto Cleanup;
|
||||
if (!LoadCoreEngine(&pRpcCoreManager->pWow64Core, &pRpcCoreManager->pWow64CoreCtxt, TRUE))
|
||||
{
|
||||
OS_FREE(pRpcCoreManager);
|
||||
return NULL;
|
||||
}
|
||||
pRpcCoreManager->pWow64CoreCtxt = pRpcCoreManager->pWow64Core->RpcCoreInitFn();
|
||||
#endif
|
||||
End:
|
||||
return (pRpcCoreManager);
|
||||
#ifdef _WIN64
|
||||
Cleanup:
|
||||
#endif
|
||||
OS_FREE(pRpcCoreManager);
|
||||
pRpcCoreManager = NULL;
|
||||
goto End;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
+7
-2
@@ -230,6 +230,7 @@ typedef struct _EnumCtxt_T{
|
||||
//------------------------------------------------------------------------------
|
||||
VOID __cdecl RpcDbgPrint(void* pContext, const char* pTxt)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pContext);
|
||||
printf("%s\n", pTxt);
|
||||
}
|
||||
|
||||
@@ -292,7 +293,7 @@ End:
|
||||
//------------------------------------------------------------------------------
|
||||
int DecompileAllInterfaces(RpcCore_T* pRpcCore)
|
||||
{
|
||||
EnumCtxt_T EnumCtxt;
|
||||
EnumCtxt_T EnumCtxt = {0};
|
||||
RpcDecompilerHelper_T* pRpcDecompilerHelper;
|
||||
HMODULE hDecompiler = NULL;
|
||||
|
||||
@@ -336,6 +337,10 @@ End:
|
||||
char* pCmdLineA = NULL;
|
||||
char** argv = &pCmdLineA;
|
||||
|
||||
UNREFERENCED_PARAMETER(pCmdLine);
|
||||
UNREFERENCED_PARAMETER(hInstance);
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
UNREFERENCED_PARAMETER(nCmdShow);
|
||||
pCmdLineA = GetCommandLineA();
|
||||
#endif
|
||||
QApplication app(argc, argv);
|
||||
@@ -373,7 +378,7 @@ End:
|
||||
hMainIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MAIN_ICON));
|
||||
if (hMainIcon!=NULL)
|
||||
{
|
||||
pMainWindow->setWindowIcon(QPixmap::fromWinHICON(hMainIcon));
|
||||
pMainWindow->setWindowIcon(QtWin::fromHICON(hMainIcon));
|
||||
DestroyIcon(hMainIcon);
|
||||
}
|
||||
return app.exec();
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
//
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,0
|
||||
PRODUCTVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_,0
|
||||
FILEVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_, _RPCVIEW_VERSION_BUILD_
|
||||
PRODUCTVERSION _RPCVIEW_VERSION_MAJOR_,_RPCVIEW_VERSION_MINOR_,_RPCVIEW_VERSION_RELEASE_, _RPCVIEW_VERSION_BUILD_
|
||||
FILEFLAGSMASK 0x0L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#define _RPCVIEW_VERSION_MAJOR_ @RPCVIEW_VERSION_MAJOR@
|
||||
#define _RPCVIEW_VERSION_MINOR_ @RPCVIEW_VERSION_MINOR@
|
||||
#define _RPCVIEW_VERSION_RELEASE_ @RPCVIEW_VERSION_RELEASE@
|
||||
#define _RPCVIEW_PRODUCT_VERSION_ "@RPCVIEW_VERSION_MAJOR@.@RPCVIEW_VERSION_MINOR@.@RPCVIEW_VERSION_RELEASE@.0"
|
||||
#define _RPCVIEW_VERSION_BUILD_ @RPCVIEW_VERSION_BUILD@
|
||||
#define _RPCVIEW_PRODUCT_VERSION_ "@RPCVIEW_VERSION_MAJOR@.@RPCVIEW_VERSION_MINOR@.@RPCVIEW_VERSION_RELEASE@.@RPCVIEW_VERSION_BUILD@"
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user