parent
a69675881d
commit
f3f5135efc
@ -0,0 +1,3 @@
|
||||
[submodule "tool/QDarkStyleSheet"]
|
||||
path = tool/QDarkStyleSheet
|
||||
url = https://github.com/gmh5225/QDarkStyleSheet
|
After Width: | Height: | Size: 10 KiB |
@ -1,3 +1,7 @@
|
||||
# Tool-DIYSystemMemoryDump
|
||||
|
||||
DIYSystemMemoryDump is a tool that forces a lock on the type of system memory dump.
|
||||
|
||||
![image](DIYSystemMemoryDump.png)
|
||||
|
||||
# Documents
|
||||
- https://docs.microsoft.com/en-us/troubleshoot/windows-server/performance/memory-dump-file-options
|
||||
|
@ -0,0 +1,73 @@
|
||||
# This file is used to ignore files which are generated
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
*~
|
||||
*.autosave
|
||||
*.a
|
||||
*.core
|
||||
*.moc
|
||||
*.o
|
||||
*.obj
|
||||
*.orig
|
||||
*.rej
|
||||
*.so
|
||||
*.so.*
|
||||
*_pch.h.cpp
|
||||
*_resource.rc
|
||||
*.qm
|
||||
.#*
|
||||
*.*#
|
||||
core
|
||||
!core/
|
||||
tags
|
||||
.DS_Store
|
||||
.directory
|
||||
*.debug
|
||||
Makefile*
|
||||
*.prl
|
||||
*.app
|
||||
moc_*.cpp
|
||||
ui_*.h
|
||||
qrc_*.cpp
|
||||
Thumbs.db
|
||||
*.res
|
||||
*.rc
|
||||
/.qmake.cache
|
||||
/.qmake.stash
|
||||
|
||||
# qtcreator generated files
|
||||
*.pro.user*
|
||||
|
||||
# xemacs temporary files
|
||||
*.flc
|
||||
|
||||
# Vim temporary files
|
||||
.*.swp
|
||||
|
||||
# Visual Studio generated files
|
||||
*.ib_pdb_index
|
||||
*.idb
|
||||
*.ilk
|
||||
*.pdb
|
||||
*.sln
|
||||
*.suo
|
||||
*.vcproj
|
||||
*vcproj.*.*.user
|
||||
*.ncb
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.vcxproj
|
||||
*vcxproj.*
|
||||
|
||||
# MinGW generated files
|
||||
*.Debug
|
||||
*.Release
|
||||
|
||||
# Python byte code
|
||||
*.pyc
|
||||
|
||||
# Binaries
|
||||
# --------
|
||||
*.dll
|
||||
*.exe
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1 @@
|
||||
Subproject commit 6eca4512251843debc24029672d866ca36cb8057
|
@ -0,0 +1,26 @@
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
|
||||
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
#endif
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
|
||||
QFile f(":/qdarkstyle/dark/style.qss");
|
||||
if (!f.exists()) {
|
||||
printf("Unable to set stylesheet, file not found\n");
|
||||
} else {
|
||||
f.open(QFile::ReadOnly | QFile::Text);
|
||||
QTextStream ts(&f);
|
||||
qApp->setStyleSheet(ts.readAll());
|
||||
}
|
||||
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include <thread>
|
||||
#include <QMessageBox>
|
||||
#include <QSettings>
|
||||
#include <QThread>
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent), ui(new Ui::MainWindow), mDumpType(DUMPTYPE::KERNEL), mStop(false),
|
||||
mRunning(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
|
||||
setFixedSize(this->width(), this->height());
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::on_pushButton_start_clicked()
|
||||
{
|
||||
if (mRunning) {
|
||||
QMessageBox::information(this, "Tips", "You are running now!");
|
||||
return;
|
||||
}
|
||||
mRunning = true;
|
||||
mStop = false;
|
||||
|
||||
//https://docs.microsoft.com/en-us/troubleshoot/windows-server/performance/memory-dump-file-options
|
||||
if (ui->radioButton_Auto->isChecked()) {
|
||||
mDumpType = DUMPTYPE::AUTO;
|
||||
} else if (ui->radioButton_Complete->isChecked()) {
|
||||
mDumpType = DUMPTYPE::COMPLETE;
|
||||
} else if (ui->radioButton_Kernel->isChecked()) {
|
||||
mDumpType = DUMPTYPE::KERNEL;
|
||||
} else if (ui->radioButton_Small->isChecked()) {
|
||||
mDumpType = DUMPTYPE::SMALL;
|
||||
}
|
||||
|
||||
std::thread t1([&] {
|
||||
while (!mStop) {
|
||||
//HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
|
||||
QSettings qRegQ("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\CrashControl",
|
||||
QSettings::NativeFormat);
|
||||
qRegQ.setValue("AlwaysKeepMemoryDump", (int) 0);
|
||||
qRegQ.setValue("CrashDumpEnabled", (int) mDumpType);
|
||||
//20ms
|
||||
QThread::msleep(20);
|
||||
}
|
||||
mRunning = false;
|
||||
});
|
||||
t1.detach();
|
||||
|
||||
QMessageBox::information(this, "Tips", "Start new running!");
|
||||
}
|
||||
|
||||
void MainWindow::on_pushButton_stop_clicked()
|
||||
{
|
||||
mStop = true;
|
||||
QMessageBox::information(this, "Tips", "Stop running!");
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui { class MainWindow; }
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
private slots:
|
||||
void on_pushButton_start_clicked();
|
||||
|
||||
void on_pushButton_stop_clicked();
|
||||
|
||||
public:
|
||||
enum DUMPTYPE { AUTO = 7, KERNEL = 2, SMALL = 3, COMPLETE = 1 };
|
||||
|
||||
public:
|
||||
DUMPTYPE mDumpType;
|
||||
bool mStop;
|
||||
bool mRunning;
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
};
|
||||
#endif // MAINWINDOW_H
|
@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>411</width>
|
||||
<height>228</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>DIYSystemMemoryDump</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Dump Type</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_Complete">
|
||||
<property name="text">
|
||||
<string>Complete memory dump</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_Kernel">
|
||||
<property name="text">
|
||||
<string>Kernel memory dump</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_Auto">
|
||||
<property name="text">
|
||||
<string>Automatic memory dump</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButton_Small">
|
||||
<property name="text">
|
||||
<string>Small memory dump</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_start">
|
||||
<property name="text">
|
||||
<string>Start</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_stop">
|
||||
<property name="text">
|
||||
<string>Stop</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>411</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -0,0 +1,44 @@
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# You can make your code fail to compile if it uses deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
mainwindow.h
|
||||
|
||||
FORMS += \
|
||||
mainwindow.ui
|
||||
|
||||
!contains(QMAKE_HOST.arch, x86_64) {
|
||||
TARGET = DIYSystemMemoryDump32
|
||||
} else {
|
||||
TARGET = DIYSystemMemoryDump64
|
||||
}
|
||||
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
|
||||
|
||||
# ICO
|
||||
RC_ICONS = NewWorld.ico
|
||||
|
||||
# RESOURCES
|
||||
RESOURCES += QDarkStyleSheet/qdarkstyle/dark/style.qrc
|
||||
RESOURCES += QDarkStyleSheet/qdarkstyle/light/style.qrc
|
||||
RESOURCES += QDarkStyleSheet/qdarkstyle/X64DBGDark/style.qrc
|
||||
|
||||
#UAC
|
||||
QMAKE_LFLAGS_WINDOWS += /MANIFESTUAC:"level='requireAdministrator'"
|
Loading…
Reference in new issue