能力值:
( LV4,RANK:50 )
|
-
-
2 楼
查他调用的api
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
参考一下Devcon的源码看看
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
会逆向应先从窗口过程开始。
|
能力值:
( LV7,RANK:100 )
|
-
-
5 楼
setupapi
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢前辈。
我也找了这方面的api,找到个范围setupapi。但是我又怎么进一步在setupapi里找到我需要的呢?我没有windows程序的开发经验。我还有个想法,api方面IDA会有帮助吗?我没怎么用过IDA,而OD里的输入表经常打不开,看不到所有函数。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
谢谢前辈。
我查了,Devcon确实和我这个目标软件关系挺大的。我会找到源码好好借鉴的。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
谢谢前辈。
我最近也在学VC,希望清楚windows程序的流程是什么样的。不过感觉内容好多,我想请问哪些windows的知识是必须的,而其他windows方面的可以当做字典,用的时候去查?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢前辈。
我找到了setupapi这一步。但是我不知道是因为我没有windows程序开发的经验,还是其他原因。我没法进一步确定那软件中用的是什么api。
|
能力值:
( LV7,RANK:100 )
|
-
-
10 楼
// EnumDevices.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <SetupAPI.h>
#pragma comment(lib, "setupapi.lib")
// SPDRP_DEVICEDESC
// SPDRP_CLASS
// SPDRP_FRIENDLYNAME
typedef BOOL (*TfEnumDevicesCallback)(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID lpContext);
VOID EnumDevices(TCHAR *DeviceClassName, TfEnumDevicesCallback Callback, PVOID CallbackContext)
{
GUID Guid;
DWORD cbOpt;
if (SetupDiClassGuidsFromName(DeviceClassName, &Guid, 1, &cbOpt))
{
HDEVINFO hDev;
hDev = SetupDiGetClassDevs(&Guid, NULL, HWND_DESKTOP, DIGCF_PRESENT);
if (hDev != INVALID_HANDLE_VALUE)
{
DWORD MemberIndex;
SP_DEVINFO_DATA sdd;
MemberIndex = 0;
sdd.cbSize = sizeof(sdd);
while (SetupDiEnumDeviceInfo(hDev, MemberIndex, &sdd))
{
if (!Callback(hDev, &sdd, CallbackContext))
{
break;
}
MemberIndex++;
}
SetupDiDestroyDeviceInfoList(hDev);
}
}
return;
}
BOOL GetDevicePropertyValue(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PVOID *lppResult, DWORD *lpbResult)
{
PBYTE lpBuffer;
DWORD cbBuffer;
lpBuffer = NULL;
cbBuffer = 0;
if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet, DeviceInfoData, Property, NULL, lpBuffer, cbBuffer, &cbBuffer)
&& (cbBuffer > 0))
{
if (lpBuffer = (PBYTE)GlobalAlloc(GPTR, cbBuffer))
{
if (SetupDiGetDeviceRegistryProperty(DeviceInfoSet, DeviceInfoData, Property, NULL, lpBuffer, cbBuffer, &cbBuffer))
{
*lppResult = lpBuffer;
*lpbResult = cbBuffer;
return TRUE;
}
GlobalFree(lpBuffer);
}
}
return FALSE;
}
VOID FreeGetDevicePropertyValue(PVOID lpBuffer)
{
GlobalFree(lpBuffer);
}
BOOL EnumNetCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
PVOID lpBusNumber;
DWORD cbBusNumber;
if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_BUSNUMBER, &lpBusNumber, &cbBusNumber))
{
if (*(DWORD*)lpBusNumber)
{
PVOID lpFriendlyName;
DWORD cbFriendlyName;
if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_FRIENDLYNAME, &lpFriendlyName, &cbFriendlyName))
{
_tprintf(TEXT("%s\n"), lpFriendlyName);
FreeGetDevicePropertyValue(lpFriendlyName);
}
}
FreeGetDevicePropertyValue(lpBusNumber);
}
return TRUE;
}
BOOL EnumCpuCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
PVOID lpFriendlyName;
DWORD cbFriendlyName;
if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_FRIENDLYNAME, &lpFriendlyName, &cbFriendlyName))
{
_tprintf(TEXT("%s\n"), lpFriendlyName);
FreeGetDevicePropertyValue(lpFriendlyName);
}
return TRUE;
}
BOOL EnumDiskCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
PVOID lpFriendlyName;
DWORD cbFriendlyName;
if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_FRIENDLYNAME, &lpFriendlyName, &cbFriendlyName))
{
_tprintf(TEXT("%s\n"), lpFriendlyName);
FreeGetDevicePropertyValue(lpFriendlyName);
}
return TRUE;
}
BOOL EnumDisplayCallback(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PVOID CallbackContext)
{
PVOID lpFriendlyName;
DWORD cbFriendlyName;
if (GetDevicePropertyValue(DeviceInfoSet, DeviceInfoData, SPDRP_DEVICEDESC, &lpFriendlyName, &cbFriendlyName))
{
_tprintf(TEXT("%s\n"), lpFriendlyName);
FreeGetDevicePropertyValue(lpFriendlyName);
}
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
UCHAR Mac[8];
_tsetlocale(LC_ALL, TEXT("chs"));
_tprintf(TEXT("%s\n"), TEXT("Net"));
EnumDevices(TEXT("Net"), EnumNetCallback, NULL);
_tprintf(TEXT("\n"));
_tprintf(TEXT("%s\n"), TEXT("Processor"));
EnumDevices(TEXT("Processor"), EnumCpuCallback, NULL);
_tprintf(TEXT("\n"));
_tprintf(TEXT("%s\n"), TEXT("Display"));
EnumDevices(TEXT("Display"), EnumDisplayCallback, NULL);
return getchar();
}
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
谢谢前辈。
我想再问一下,代码里包含的知识在哪里能学到啊?《Windows核心编程》吗?学他之前是不是不用先《windows程序设计》啊,因为听说《windows程序设计》主要讲窗口的。希望有师兄前辈指点一句。
|
能力值:
( LV7,RANK:100 )
|
-
-
12 楼
大都是在网上找,我也没看过什么具体的书籍,多多加油吧。
|