自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 1562

原创 通过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 4193

原创 关于GetSystemTimeAdjustment中提到的time of day

测试时发现我所用Win7x64操作系统,默认TimeAdjustment和TimeIncrement都是156001XP操作系统,默认TimeAdjustment和TimeIncrement都是156250两者相不大,都是15ms左右,但是,如果在同一时间创建多个文件,然后查询文件创建时间会发现:Win7x64操作系统下:XP操作系统下:

2015-04-15 12:35:26 1187

原创 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 2181

原创 给一个目录下的一个已存在的文件生成一个新的文件名

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 693

原创 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 662

原创 获取进程全路径

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 2967

原创 使用UpdateResource让一个exe在退出时修改自己的资源

1、生成exe时使用UpdateResource添加指定资源2、运行exe3、让exe退出,但是在退出之前启动一个新进程,并将所需数据传递给新进程4、新进程等待exe退出后,使用UpdateResource修改exe指定资源5、让新进程自杀

2015-01-14 16:03:22 1080

原创 在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 15029 2

原创 使用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 735

原创 使用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 2107

原创 允许控制台应用程序printf显示中文

setlocale(LC_ALL, "");

2015-01-09 16:09:38 720 1

原创 查询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 763

原创 使用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 2165

原创 使用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 1180

原创 DeviceIoControl

首先说明,CPU序列号并不是全球唯一的,以Intel为例,其不同型号的CPU序列号肯定不同,但不保证同型号的CPU序列号也各不相同,但据说P3后都是全球唯一的,一帆风没有详细考证。CPU序列号有一个好处就是非常难以修改,至少目前还没听说。将CPU ID 和MAC id 、硬盘id组合起来生成软件序列号,可以大大增加序列号的安全性。(后两者都可以通过软件方法修改)。并不是所有的处理器

2015-01-04 17:13:52 659

原创 在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 1543

原创 创建线程时安全传递参数例子

虽然传参不是由分配者去释放的,但是这样做既能保证参数传递的安全性,又能不影响创建者线程的正常工作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 542

原创 获取一个路径所在存储设备的属性

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 481

原创 屏蔽指定代码段中的指定警告

#pragma warning(push)#pragma warning(disable: /*想要屏蔽的警告*/)// code#pragma warning(pop)

2014-12-30 11:12:16 1001

原创 prefast

使用prefast build -cz编译驱动可以检查驱动缺陷使用prefast view可以查看检查出来的驱动缺陷

2014-12-30 11:08:30 607

原创 内存检查

IsBadReadPtrIsBadStringPtrIsBadWritePtrIsBadCodePtr

2014-06-15 17:22:44 471

原创 CopyFile、MoveFile、CopyFileEx、MoveFileEx

CopyFile和MoveFile,支持跨卷,不支持覆盖CopyFileEx和MoveFileEx,支持跨卷,支持覆盖

2014-06-15 13:37:29 2564

原创 使用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 5914

原创 命令行

net stop "ciss data" 2>nul

2014-06-12 22:35:15 431

原创 获取一个路径所在硬盘驱动器的类型

/*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 805

原创 在应用层使用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 3600 1

原创 查询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 791

原创 缩写、简称

mstsc:Microsoft terminal services clientgcc:

2014-05-13 09:21:48 459

转载 调用约定_百度百科

函数调用约定,是指当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数是怎么传递和由谁平衡堆栈的,当然还有返回值。 1、含义当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数是怎么传递和由谁平衡堆栈的,当然还有返回值。 2、几种类型__stdcall,__cdecl

2014-05-12 16:00:42 485

转载 调用约定_CSDN

原帖:http://blog.csdn.net/zjwoody/article/details/7887988

2014-05-12 15:59:23 473

转载 #pragma once和#ifndef

1概述编辑这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。#pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,不过现在基本上已经是每个编译器都有这个杂注了。#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语

2014-05-12 15:27:44 387

原创 strlen和wcslen

不包括字符串结束符的字符数

2014-05-12 14:58:28 685

原创 结构体初始化

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 550

原创 忽略警告

#pragma warning(disable:4100) // 未引用的形参

2014-05-12 14:24:24 574

原创 显示一个变量的名字

#define showVariable(variable) printf("variable's name is : %s \n", #variable)

2014-05-12 14:21:51 570

原创 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 489

转载 结构体对齐

原帖:http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html

2014-05-12 13:31:40 451

转载 内核延时

NdisMSleepNdisStallExecutionKeDelayExecutionThreadKeWaitForSingleObject

2014-03-27 23:16:18 530

转载 时间换算

1秒=1000毫秒1毫秒=1000微妙1微妙=1000纳秒1纳秒=1000皮秒1皮秒=1000飞秒1飞秒=1000渺秒毫秒msmillisencond纳秒nsnanosecond常用作内存读写速度的单位

2014-03-27 21:46:04 798

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除