- 博客(102)
- 收藏
- 关注
原创 打印环形数字矩阵,顺时针,边计算边打印,时间复杂度O(n^2)
BOOL GenLoopFoamMatrix( __in int nBegin, __in int nLengthSide ){ BOOL bRet = FALSE; int i = 0; int j = 0; int * nArray = NULL; int nLoop = 0; int nLengthSideLoop = 0; __
2015-12-15 22:11:36
1644
原创 通过NtQueryInformationProcess查找一个进程的父进程
typedef struct _PROCESS_BASIC_INFORMATION { PVOID Reserved1; PPEB PebBaseAddress; PVOID Reserved2[2]; ULONG_PTR UniqueProcessId; PVOID Reserved3;} PROCESS_BASIC_INFORMATION;Rese
2015-04-24 14:09:42
4317
原创 关于GetSystemTimeAdjustment中提到的time of day
测试时发现我所用Win7x64操作系统,默认TimeAdjustment和TimeIncrement都是156001XP操作系统,默认TimeAdjustment和TimeIncrement都是156250两者相不大,都是15ms左右,但是,如果在同一时间创建多个文件,然后查询文件创建时间会发现:Win7x64操作系统下:XP操作系统下:
2015-04-15 12:35:26
1261
原创 NtSetFileInformation和DeleteOnClose之前的关系。
情况1:1、线程T1,NtCreateFile,使用DeleteOnClose标记2、线程T2,NtCreateFile3、线程T1,NtClose4、线程T2,NtClose,此时文件被删除情况2:1、线程T1,NtCreateFile,使用DeleteOnClose标记2、线程T2,NtCreateFile3、线程T2,NtClose4、线程
2015-03-16 12:50:28
2252
原创 给一个目录下的一个已存在的文件生成一个新的文件名
VOID ModifySaveAs(LPTSTR lpPath){ LPTSTR lpPostion = NULL; LPTSTR lpPositionPre = NULL; TCHAR NewFileName[MAX_PATH] = {0}; LPTSTR lpPositionPost = NULL; ULONG ulCount = 0; TCHAR Num[
2015-02-02 12:27:09
741
原创 WCHAR转CHAR
void TestWideCharToChar(){ WCHAR wchIn[MAX_PATH] = {0}; CHAR chOut[MAX_PATH] = {0}; LPSTR lpANSIBuf = NULL; int nANSIBufLen = 0; __try { CopyMemory(wchIn, L"我我我我我我", wcslen(L"我我我我我我") *
2015-01-30 15:37:47
706
原创 获取进程全路径
BOOL GetProcPath( __in BOOL bCurrentProc, __in ULONG ulPid, __inout LPTSTR lpProcPath, __in ULONG ulProcPathBufLen ){ BOOL bRet = FALSE; HMODULE hModule = NULL; HANDLE hProc
2015-01-19 13:27:26
3029
原创 使用UpdateResource让一个exe在退出时修改自己的资源
1、生成exe时使用UpdateResource添加指定资源2、运行exe3、让exe退出,但是在退出之前启动一个新进程,并将所需数据传递给新进程4、新进程等待exe退出后,使用UpdateResource修改exe指定资源5、让新进程自杀
2015-01-14 16:03:22
1206
原创 在bat脚本中区分操作系统版本
@echo offset OsVersion=0set OsProcessor=0echo 操作系统版本:ver|findstr /r /i " [版本 5.1.*]" > NUL && goto WindowsXPver|findstr /r /i " [版本 6.1.*]" > NUL && goto Windows7goto UnknownVersion:WindowsX
2015-01-14 15:38:47
15594
1
原创 使用SHChangeNotify让进程立即删除自己
VOID DeleteMyself(){ TCHAR tchProcPath[MAX_PATH] = {0}; __try { if (!GetModuleFileName(NULL, tchProcPath, MAX_PATH)) { printf("[DeleteMyself] : GetModuleFileName failed. (%d) \n", GetLas
2015-01-12 10:21:52
786
原创 使用SetPriorityClass让进程退出之后删除自己
VOID DeleteMyself(){ TCHAR tchCmd[MAX_PATH] = {0}; TCHAR tchProcPath[MAX_PATH] = {0}; STARTUPINFO StartupInfo = {0}; PROCESS_INFORMATION ProcInfo = {0}; __try { if (!GetEnvi
2015-01-12 10:19:50
2148
原创 查询WMI信息
BOOL QueryWMI(){ BOOL bRet = FALSE; HRESULT hResult = S_FALSE; BOOL bNeedCoUnInit = FALSE; IWbemLocator* pIWbemLocator = NULL; IWbemServices* pIWbemServices = NUL
2015-01-09 13:54:42
816
原创 使用GetBestInterfaceEx获取电脑正在使用的MACAddress
BOOL GetCurrentPhysicalAddress( __in char* pchLocalIp, __in ULONG ulPort, __in ULONG ulFamily ){ BOOL bRet = FALSE; ULONG ulSizeOfpIpAdapterAddresses = 0; PIP_ADAPTER_ADDRESSES
2015-01-09 11:18:04
2275
原创 使用GetAdaptersAddresses获取电脑所有MACAddress
BOOL GetPhysicalAddress(){ BOOL bRet = FALSE; ULONG ulSizeOfpIpAdapterAddresses = 0; PIP_ADAPTER_ADDRESSES pIpAdapterAddresses = NULL; ULONG ulResult = ERROR_SUCCESS; P
2015-01-09 10:49:37
1302
原创 DeviceIoControl
首先说明,CPU序列号并不是全球唯一的,以Intel为例,其不同型号的CPU序列号肯定不同,但不保证同型号的CPU序列号也各不相同,但据说P3后都是全球唯一的,一帆风没有详细考证。CPU序列号有一个好处就是非常难以修改,至少目前还没听说。将CPU ID 和MAC id 、硬盘id组合起来生成软件序列号,可以大大增加序列号的安全性。(后两者都可以通过软件方法修改)。并不是所有的处理器
2015-01-04 17:13:52
700
原创 在Minifilter中使用PsSetCreateProcessNotifyRoutine之后监控到的一些进程信息
一个进程总是被另一个进程创建的,追根求源,所有进程的“父”进程都是0进程以双击桌面上的1.txt为例:默认方式1.txt会被notepad.exe打开,在回调VOID(*PCREATE_PROCESS_NOTIFY_ROUTINE) ( IN HANDLE ParentId, IN HANDLE ProcessId, IN BOOLEAN
2014-12-30 13:29:55
1595
原创 创建线程时安全传递参数例子
虽然传参不是由分配者去释放的,但是这样做既能保证参数传递的安全性,又能不影响创建者线程的正常工作typedef struct _MY_STRUCT{ ULONG ul1; ULONG ul2; ULONG ul3;} MY_STRUCT, *PMY_STRUCT, *LPMY_STRUCT;DWORD WINAPI ThreadProc( _In_ LPVOID lpPara
2014-12-30 12:43:48
585
原创 获取一个路径所在存储设备的属性
BOOL GetPropertyOfDeviceOrAdapter( IN LPTSTR lpFileName ){ STORAGE_BUS_TYPE Ret = BusTypeUnknown; TCHAR FileSymName[MAX_PATH * 2] = {0}; TCHAR VolumeSymName[10] = {0};
2014-12-30 11:32:42
510
原创 屏蔽指定代码段中的指定警告
#pragma warning(push)#pragma warning(disable: /*想要屏蔽的警告*/)// code#pragma warning(pop)
2014-12-30 11:12:16
1084
原创 CopyFile、MoveFile、CopyFileEx、MoveFileEx
CopyFile和MoveFile,支持跨卷,不支持覆盖CopyFileEx和MoveFileEx,支持跨卷,支持覆盖
2014-06-15 13:37:29
2617
原创 使用CreateProcess执行命令行
BOOL ExecuteCommand( IN LPTSTR lpCommand ){ BOOL bRet = FALSE; UINT uResult = 0; TCHAR CommandLine[MAX_PATH] = {0}; STARTUPINFO StartupInfo = {0}; PROCESS_INFORMATION P
2014-06-13 10:27:57
6017
原创 获取一个路径所在硬盘驱动器的类型
/*DRIVE_UNKNOWN0The drive type cannot be determined.DRIVE_NO_ROOT_DIR1The root path is invalid; for example, there is no volume mounted at the specified path.DRIVE_REMOVABLE2The drive has r
2014-06-12 11:23:18
838
原创 在应用层使用ntdll.dll中的未导出函数
// Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"typedef NTSTATUS (NTAPI* NTCREATEFILE)( OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO
2014-06-05 18:34:38
3694
原创 查询CTL_CODE
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ )int strToInt(char* str){ int i = 0;
2014-05-24 11:30:27
843
转载 调用约定_百度百科
函数调用约定,是指当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数是怎么传递和由谁平衡堆栈的,当然还有返回值。 1、含义当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数是怎么传递和由谁平衡堆栈的,当然还有返回值。 2、几种类型__stdcall,__cdecl
2014-05-12 16:00:42
511
转载 #pragma once和#ifndef
1概述编辑这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。#pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,不过现在基本上已经是每个编译器都有这个杂注了。#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语
2014-05-12 15:27:44
406
原创 结构体初始化
typedef struct byte_align_s{ char a; long double b;} byte_align_t; byte_align_t byteAling; // 不对byteAling做任何初始化 byte_align_t byteAling = {0, 0}; // 只初始化byteAling.a和byteAling.b byte_align
2014-05-12 14:50:20
568
原创 显示一个变量的名字
#define showVariable(variable) printf("variable's name is : %s \n", #variable)
2014-05-12 14:21:51
600
原创 malloc和calloc
void allocateExample1(){ void* p = NULL; int len = 10; __try { p = malloc(len); if (!p) { printf("[allocateExample1] : malloc failed : (%d - %s) \n", errno, strerror(errno)); __
2014-05-12 14:15:29
549
转载 内核延时
NdisMSleepNdisStallExecutionKeDelayExecutionThreadKeWaitForSingleObject
2014-03-27 23:16:18
558
转载 时间换算
1秒=1000毫秒1毫秒=1000微妙1微妙=1000纳秒1纳秒=1000皮秒1皮秒=1000飞秒1飞秒=1000渺秒毫秒msmillisencond纳秒nsnanosecond常用作内存读写速度的单位
2014-03-27 21:46:04
916
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人