| yueting's profile儿子成长,父亲知识库PhotosBlogLists | Help |
|
儿子成长,父亲知识库记录程序的点点滴滴......,做人要低调,不能让儿子太早出名了,哈哈 February 26 命令行方式来清除IE缓冲如果想命令行方式来清除IE缓冲,可以使用借助RunDll32.exe 来运行Internet选项的对应功能。 比如: Temporary Internet Files (Internet临时文件)
Cookies
History (历史记录)
Form Data (表单数据)
Passwords (密码)
Delete All (全部删除)
Delete All - "Also delete files and settings stored by add-ons"
想通过编程方式清除IE缓存, 调用Win32 API函数 ShellExecute 或者 CreateProcess 来执行以上的命令行就可以了。 例子: ShellExecute(NULL, _T("open"), _T("rundll32.exe"), _T("InetCpl.cpl,ClearMyTracksByProcess 4351"), NULL, SW_SHOWNORMAL); January 11 WINUSB与Prolific驱动一、以下就是WINUSB系统的框架: 从上图可以看出: WINUSB可以针对于一个设备作为一个驱动,可以看左边的这种设计。 也可以由usbccgp作为父驱动,再由每个Interface生成一个winusb的子驱动。可以看右边的设计。 两种都是通过Winusb来进行通讯的。但在实际使用过程中,两者还是有些不一样的地方。因为每个USB Device都不是完针对于USB的specification来做的。这就是我们决定用上图左边的这种设计。驱动少做。让在User mode处理更多的事情。这样来兼容大都USB设备。 二、pnpmon的工作原理 Pnpmon.sys是一个内核的驱动程序。驱动在加载时,Pnpmon.sys就得到Hub的Driver_Object.把原驱动的Hub的Dispatch的入口地址修改了。用我们的代码来代替。当OS PNP有设备接入(Plug in)时,系统的PDO就一级一级向由驱动来创建供他的设备来运用。 由于pnpmon在hook 的地方为USB HUB的Device stack.PNP返回给系统的BusQueryDeviceID,BusQueryHardwareIDs,BusQueryCompatibleIDs时,我们修改IO_STACK中的内容就可以替换PID与VID了。 三、我们修改两个PID、VID的方法是不会影响的 我们在替换PID与VID时,pnpmon的是知道真正设备的驱动PID,VID,这样就可以根据以前驱动的设备来确认虚拟的PID与VID。目前(prolific的驱动用 Vid_80EE&Pid_FD01)、其它的用(Vid_80EE&Pid_FD02),对于OS来,就能识别成不同的设备,所以就可以安装不能的驱动。 不同的硬件,不同的驱动,并且都是由microsoft签名过或是mircrosoft写的Driver,当然没有问题。 December 10 一个用程序修改HUB电源的程序/// code start //////////////////////////////////////////////////// void CTestDlg::testCallWMI() { int error_code; HANDLE h = INVALID_HANDLE_VALUE; BYTE guid[]={0x6f, 0x0a, 0x7c, 0x82, 0xb0, 0xfe, 0xd0, 0x11, 0xbd, 0x26, 0x00, 0xaa, 0x00, 0xb7, 0xb3, 0x2a,}; wchar_t hubname[]=L"USB\\ROOT_HUB\\4&139B5C82&0"; wchar_t diid[MAX_PATH]; HMODULE hWmiDll=LoadLibrary("WMI.DLL"); if (hWmiDll!=NULL) { int (__stdcall *lpWmiSetSingleInstanceW)(HANDLE,wchar_t*,int,int,LPBYTE)=NULL;; lpWmiSetSingleInstanceW=(int (__stdcall *)(HANDLE,wchar_t*,int,int,LPBYTE))GetProcAddress(hWmiDll,"WmiSetSingleInstanceW"); int (__stdcall *lpWmiQuerySingleInstanceW)(HANDLE,wchar_t*,int*,LPBYTE)=NULL;; lpWmiQuerySingleInstanceW=(int (__stdcall *)(HANDLE,wchar_t*,int*,LPBYTE))GetProcAddress(hWmiDll,"WmiQuerySingleInstanceW"); void (__stdcall *lpWmiCloseBlock)(HANDLE)=NULL;; lpWmiCloseBlock=(void(__stdcall*)(HANDLE))GetProcAddress(hWmiDll,"WmiCloseBlock"); int (__stdcall *lpWmiOpenBlock)(BYTE*, int, HANDLE*)=NULL;; lpWmiOpenBlock=(int(__stdcall*)(BYTE*, int, HANDLE*))GetProcAddress(hWmiDll,"WmiOpenBlock"); void (__stdcall *lpWmiDevInstToInstanceNameW)(wchar_t*,int,wchar_t*,int)=NULL; lpWmiDevInstToInstanceNameW=(void(__stdcall*)(wchar_t*,int,wchar_t*,int))GetProcAddress(hWmiDll,"WmiDevInstToInstanceNameW"); if (lpWmiOpenBlock && lpWmiCloseBlock && lpWmiDevInstToInstanceNameW && lpWmiQuerySingleInstanceW && lpWmiSetSingleInstanceW) { int l=wcslen(hubname); lpWmiDevInstToInstanceNameW(diid,l+8,hubname,0); error_code=lpWmiOpenBlock(guid,0,&h); if (error_code==ERROR_SUCCESS) { int size=0; error_code=lpWmiQuerySingleInstanceW(h,diid,&size,NULL); BYTE* p = new BYTE[size]; error_code=lpWmiQuerySingleInstanceW(h,diid,&size,p); BYTE enable=0; error_code=lpWmiSetSingleInstanceW(h,diid,0,1,&enable); error_code=lpWmiQuerySingleInstanceW(h,diid,&size,p); lpWmiCloseBlock(h); } } } } December 04 Inf 增加一个新的class说明;以下就是TransferCable的inf文件的例子,我将在例子中说明 ;---------------------------------------------------------------; ; ================= Version section ===================== [Version] ;1这个ClassGUID要记住 ; ================= Class section ===================== [ClassInstall32] [CableClassReg] ; ================= Manufacturer section ===================== [Manufacturer] ; ================= Models section ===================== ;============Other OS Versions============ [Microsoft] ;============WinXP - x86============ [Microsoft.NTx86.5.1] ;============WinXP - amd64============ [Microsoft.NTamd64.5.2] ;============ OS-Platform specific install sections ===================== ;============WinXP - x86============ [TRANSFERCABLE_WINXP_X86.NT] [TRANSFERCABLE_WINXP_X86.NT.HW] [TRANSFERCABLE_WINXP_X86.NT.Services] [TRANSFERCABLE_WINXP_X86.NT.CoInstallers] [TRANSFERCABLE_WINXP_X86.NT.Wdf] [TRANSFERCABLE_WINXP_X86_wdfsect] ;============WinXP - amd64============ [TRANSFERCABLE_WINXP_AMD64.NT] [TRANSFERCABLE_WINXP_AMD64.NT.HW] [TRANSFERCABLE_WINXP_AMD64.NT.Services] [TRANSFERCABLE_WINXP_AMD64.NT.CoInstallers] [TRANSFERCABLE_WINXP_AMD64.NT.Wdf] [TRANSFERCABLE_WINXP_AMD64_wdfsect] ; ======== Generic installation sections ===================== [TRANSFER_CABLE.AddReg] ;这个增加的Path为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{BC103702-DD72-406F-9B28-95C868337B59}\0000 ;这儿就是ClassGUID,而不是增加到下面 [TRANSFER_CABLE.HW.AddReg] ;增加到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_067b&Pid_25a1\5&35b6bbea&0&4\Device Parameters ;interface symbolink 就要用这个GUID查询 [TRANSFER_CABLE.CopyFiles] [TRANSFER_CABLE_CoInstaller_CopyFiles] [TRANSFER_CABLE.AddService] [TRANSFER_CABLE_CoInstaller_AddReg] ; ================= Source Disks ===================== [SourceDisksNames] ; ================= Destination Dirs ===================== [DestinationDirs] ; ================= Strings ===================== [Strings] ; ar-SA ; cs-CZ ; da-DK ; de-DE ; el-GR ; en-US ; es-ES ; fi-FI ; fr-FR ; he-IL ; it-IT ; ja-JP GenericCableDesc = "USB 簡易転送ケーブル" ; ko-KR ; nl-NL ; zh-CN ; zh-TW ; pt-BR ; ru-RU ; nb-NO ; sv-SE ; pl-PL ; pt-PT ; tr-TR ; hu-HU November 24 驱动得到用户态BUFFER的代码#define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003) static VOID switch (IO_METHOD_FROM_CTL_CODE(IoControlCode)) November 09 API HOOK// APIHook.h: interface for the CAPIHook class. #if !defined(AFX_APIHOOK_H__C666B57C_5812_4793_9CE5_AB0648974B81__INCLUDED_) #if _MSC_VER > 1000 class CAPIHook // Unhook a function from all modules // Returns the original address of the hooked function public: private: PCSTR m_pszCalleeModName; // Module containing the function (ANSI) private: // Replaces a symbol's address in all module's import sections private: // Used to trap when DLLs are newly loaded // Returns address of replacement function if hooked function is requested private: #endif // !defined(AFX_APIHOOK_H__C666B57C_5812_4793_9CE5_AB0648974B81__INCLUDED_)
// APIHook.cpp: implementation of the CAPIHook class. #include "stdafx.h" #include "Toolhelp.h" #ifdef _DEBUG CString hwGetModuleBaseName(); // When an application runs on Windows 98 under a debugger, the debugger // The highest private memory address (used for Windows 98 only) /////////////////////////////////////////////////////////////////////////////// // The head of the linked-list of CAPIHook objects /////////////////////////////////////////////////////////////////////////////// CAPIHook::CAPIHook ( ReplaceAPIAddress (); // /////////////////////////////////////////////////////////////////////////////// CAPIHook::~CAPIHook() /////////////////////////////////////////////////////////////////////////////// // NOTE: This function must NOT be inlined /////////////////////////////////////////////////////////////////////////////// // Returns the HMODULE that contains the specified memory address /////////////////////////////////////////////////////////////////////////////// void CAPIHook::ReplaceIATEntryInAllMods ( /////////////////////////////////////////////////////////////////////////////// void CAPIHook::ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, /////////////////////////////////////////////////////////////////////////////// // Hook LoadLibrary functions and GetProcAddress so that hooked functions CAPIHook CAPIHook::sm_LoadLibraryW ("Kernel32.dll", "LoadLibraryW", CAPIHook CAPIHook::sm_LoadLibraryExA("Kernel32.dll", "LoadLibraryExA", CAPIHook CAPIHook::sm_LoadLibraryExW("Kernel32.dll", "LoadLibraryExW", CAPIHook CAPIHook::sm_GetProcAddress("Kernel32.dll", "GetProcAddress", /////////////////////////////////////////////////////////////////////////////// void CAPIHook::FixupNewlyLoadedModule(HMODULE hmod, DWORD dwFlags) { /////////////////////////////////////////////////////////////////////////////// HMODULE WINAPI CAPIHook::LoadLibraryA(PCSTR pszModulePath) { /////////////////////////////////////////////////////////////////////////////// HMODULE WINAPI CAPIHook::LoadLibraryW(PCWSTR pszModulePath) { /////////////////////////////////////////////////////////////////////////////// HMODULE WINAPI CAPIHook::LoadLibraryExA(PCSTR pszModulePath, /////////////////////////////////////////////////////////////////////////////// HMODULE WINAPI CAPIHook::LoadLibraryExW(PCWSTR pszModulePath, /////////////////////////////////////////////////////////////////////////////// FARPROC WINAPI CAPIHook::GetProcAddress(HMODULE hmod, PCSTR pszProcName) { //////////////////////////////// End of File ////////////////////////////////// /****************************************************************************** #pragma once /////////////////////////////////////////////////////////////////////////////// #include "CmnHdr.h" /* See Appendix A. */ /////////////////////////////////////////////////////////////////////////////// class CToolhelp { public: BOOL CreateSnapshot(DWORD dwFlags, DWORD dwProcessID = 0); BOOL ModuleFirst(PMODULEENTRY32 pme) const; // Note: The heap block functions do not reference a snapshot and public: /////////////////////////////////////////////////////////////////////////////// inline CToolhelp::CToolhelp(DWORD dwFlags, DWORD dwProcessID) { m_hSnapshot = INVALID_HANDLE_VALUE; /////////////////////////////////////////////////////////////////////////////// inline CToolhelp::~CToolhelp() { if (m_hSnapshot != INVALID_HANDLE_VALUE) /////////////////////////////////////////////////////////////////////////////// inline CToolhelp::CreateSnapshot(DWORD dwFlags, DWORD dwProcessID) { if (m_hSnapshot != INVALID_HANDLE_VALUE) if (dwFlags == 0) { /////////////////////////////////////////////////////////////////////////////// inline BOOL CToolhelp::EnableDebugPrivilege(BOOL fEnable) { // Enabling the debug privilege allows the application to see // Try to open this process's access token // Attempt to modify the "Debug" privilege /////////////////////////////////////////////////////////////////////////////// inline BOOL CToolhelp::ReadProcessMemory(DWORD dwProcessID, return(Toolhelp32ReadProcessMemory(dwProcessID, pvBaseAddress, pvBuffer, /////////////////////////////////////////////////////////////////////////////// inline BOOL CToolhelp::ProcessFirst(PPROCESSENTRY32 ppe) const { BOOL fOk = Process32First(m_hSnapshot, ppe); inline BOOL CToolhelp::ProcessNext(PPROCESSENTRY32 ppe) const { BOOL fOk = Process32Next(m_hSnapshot, ppe); inline BOOL CToolhelp::ProcessFind(DWORD dwProcessId, PPROCESSENTRY32 ppe) BOOL fFound = FALSE; /////////////////////////////////////////////////////////////////////////////// inline BOOL CToolhelp::ModuleFirst(PMODULEENTRY32 pme) const { return(Module32First(m_hSnapshot, pme)); inline BOOL CToolhelp::ModuleNext(PMODULEENTRY32 pme) const { return(Module32Next(m_hSnapshot, pme)); inline BOOL CToolhelp::ModuleFind(PVOID pvBaseAddr, PMODULEENTRY32 pme) const { BOOL fFound = FALSE; inline BOOL CToolhelp::ModuleFind(PTSTR pszModName, PMODULEENTRY32 pme) const { /////////////////////////////////////////////////////////////////////////////// inline BOOL CToolhelp::ThreadFirst(PTHREADENTRY32 pte) const { return(Thread32First(m_hSnapshot, pte)); inline BOOL CToolhelp::ThreadNext(PTHREADENTRY32 pte) const { return(Thread32Next(m_hSnapshot, pte)); /////////////////////////////////////////////////////////////////////////////// inline int CToolhelp::HowManyHeaps() const { int nHowManyHeaps = 0; inline int CToolhelp::HowManyBlocksInHeap(DWORD dwProcessID, int nHowManyBlocksInHeap = 0; inline BOOL CToolhelp::HeapListFirst(PHEAPLIST32 phl) const { return(Heap32ListFirst(m_hSnapshot, phl)); inline BOOL CToolhelp::HeapListNext(PHEAPLIST32 phl) const { return(Heap32ListNext(m_hSnapshot, phl)); inline BOOL CToolhelp::HeapFirst(PHEAPENTRY32 phe, DWORD dwProcessID, return(Heap32First(phe, dwProcessID, dwHeapID)); inline BOOL CToolhelp::HeapNext(PHEAPENTRY32 phe) const { return(Heap32Next(phe)); inline BOOL CToolhelp::IsAHeap(HANDLE hProcess, PVOID pvBlock, HEAPLIST32 hl = { sizeof(hl) }; *pdwFlags = hl.dwFlags; //////////////////////////////// End of File ////////////////////////////////// http://focus.ti.com/mcu/docs/mcuprodcodeexamples.tsp?sectionId=96
|
|
|||||
|
|