文件解锁定内容摘要:

le(pSystemsHandleInformationHandles[dwIndex].ProcessID, (HANDLE)pSystemsHandleInformationHandles[dwIndex].HandleNumber)。 } //每一次使用后,清理 if (bRemoteFlag) { CloseHandle(hTureHandle)。 } } } if (pSystemsHandleInformation!=NULL) { VirtualFree(pSystemsHandleInformation, 0, MEM_RELEASE)。 } if (hCurProcess!=NULL) { CloseHandle(hCurProcess)。 } return 0。 } //根据文件句柄获取文件路径 的线程 BOOL MyGetFileNameByHandle(__in HANDLE hFileHandle,__out WCHAR *szFileName) { BOOL bFindFlag=FALSE。 FILE_INFO FileInfo。 RtlZeroMemory(amp。 FileInfo,sizeof(FileInfo))。 =FALSE。 =hFileHandle。 HANDLE hQueryThread=CreateThread(NULL,0,MyQueryFileNameByHandleThreadFunc,amp。 FileInfo,0,NULL)。 if (WAIT_TIMEOUT == WaitForSingleObject(hQueryThread,100)) { TerminateThread(hQueryThread,2)。 } if () { if (0 == wcsicmp(szFileName,)) { bFindFlag=TRUE。 } } if (hQueryThread!=NULL) { CloseHandle(hQueryThread)。 } return bFindFlag。 } DWORD WINAPI MyQueryFileNameByHandleThreadFunc(LPVOID pParam) { FILE_INFO *pFileInfo=(FILE_INFO*)pParam。 WCHAR wcVolume[3]={0}。 NTSTATUS MyNtStatus。 IO_STATUS_BLOCK IoStatus。 UCHAR szBuff[0x1000]。 RtlZeroMemory(szBuff,sizeof(szBuff))。 FILE_NAME_INFORMATION *pFileNameInformation=(FILE_NAME_INFORMATION*)szBuff。 MyNtStatus=NtQueryInformationFile(pFileInfohFileHandle,amp。 IoStatus,pFileNameInformation, sizeof(FILE_INFO)sizeof(HANDLE)sizeof(BOOL),FileNameInformationClass)。 if(NT_SUCCESS(MyNtStatus)) { if(pFileNameInformationFileNameLength!=0) { pFileInfobFlag=TRUE。 pFileInfo=pFileNameInformationFileNameLength。 if (MyGetVolumeNameByHandle(pFileInfohFileHandle,wcVolume))// 得到盘符 { RtlZeroMemory(pFileInfo,sizeof(pFileInfo))。 pFileInfo[0]=wcVolume[0]。 pFileInfo[1]=wcVolume[1]。 wcsncpy(amp。 pFileInfo[2], pFileNameInformationFileName, pFileNameInformationFileNameLength)。 pFileInfo[2+pFileNameInformationFileNameLength1]=0。 } } } return 0。 } void GetOSVolumeSerialInfo(void) { RtlZeroMemory(amp。 VolumeInfo,sizeof(VolumeInfo))。 WCHAR szVolumeName[5]= {0}。 WCHAR Drive=39。 A39。 DWORD dwDiskMask = GetLogicalDrives()。 int nIndex=0。 for (nIndex=0。 nIndex26。 nIndex++) { if( ( (1nIndex) amp。 dwDiskMask )!=0) { Drive = nIndex + 39。 A39。 wsprintfW(szVolumeName,_T(%c:\\),Drive)。 wsprintfW(VolumeInfo[nIndex].szVolumeName,_T(%c:),Drive)。 GetVolumeInformation(szVolumeName,NULL,0,amp。 VolumeInfo[nIndex].dwVolumeSerial,0,0,0,0)。 } } }void GetOSVolumeSerialInfo(void) { RtlZeroMemory(amp。 VolumeInfo,sizeof(VolumeInfo))。 WCHAR szVolumeName[5]= {0}。 WCHAR Drive=39。 A39。 DWORD dwDiskMask = GetLogicalDrives()。 int nIndex=0。 for (nIndex=0。 nIndex26。 nIndex++) { if( ( (1nIndex) amp。 dwDiskMask )!=0) { Drive = nIndex + 39。 A39。 wsprintfW(szVolumeName,_T(%c:\\),Drive)。 wsprintfW(VolumeInfo[nIndex].szVolumeName,_T(%c:),Drive)。 GetVolumeInformation(szVolumeName,NULL,0,amp。 VolumeInfo[nIndex].dwVolumeSerial,0,0,0,0)。 } } } BOOL MyGetVolumeNameByHandle(__in HANDLE hFile,__out WCHAR *szVolume) { DWORD dwIndex=0。 BY_HANDLE_FILE_INFORMATION stHandleFileInfo。 RtlZeroMemory(amp。 stHandleFileInfo,sizeof(stHandleFileInfo))。 GetFileInformationByHandle(hFile,amp。 stHandleFileInfo)。 for(dwIndex=0。 dwIndex26。 dwIndex++) { if (!=0) { if (==VolumeInfo[dwIndex].dwVolumeSerial) { wcscpy(szVolume,VolumeInfo[dwIndex].szVolumeName)。 return TRUE。 } } } return FALSE。 } //结束 pid=dwProcessId 中的 hRemoteHandle 句柄 BOOL MyCloseRemoteHandle(__in DWORD dwProcessId,__in HANDLE hRemoteHandle) { HANDLE hExecutHandle=NULL。 BOOL bFlag=FALSE。 HANDLE hProcess=NULL。 HMODULE hKernel32Module=NULL。 hProcess=OpenProcess( PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ, FALSE,dwProcessId)。 if (NULL==hProcess) { bFlag=FALSE。 goto MyErrorExit。 } hKernel32Module = LoadLibrary( _T() )。 hExecutHandle = CreateRemoteThread(hProcess,0,0, (DWORD (__stdcall *)( void *))GetProcAddress(hKernel32Module,CloseHandle), hRemoteHandle,0,NULL)。 if (NULL==hExecutHandle) { bFlag=FALSE。 goto MyErrorExit。 } if (WaitForSingleObject(hExecutHandle,2020)==WAIT_OBJECT_0) { bFlag=TRUE。 goto MyErrorExit。 } else { bFlag=FALSE。 goto MyErrorExit。 } MyErrorExit: if (hExecutHandle!=NULL) { CloseHandle(hExecutHandle)。 } if (hProcess !=NULL) { CloseHandle(hProcess)。 } if (hKernel32Module!=NULL) { FreeLibrary(hKernel32Module)。 } return bFlag。 } //根据 PID 获取进程名 BOOL MyGetProcessNameByPID(DWORD dwProcessId,WCHAR *szProcessName) { BOOL bReturnFlag=FALSE。 PROCESSENTRY32* pProcessInfo=new PROCESSENTRY32。 pProcessInfodwSize=sizeof(PROCESSENTRY32)。 HANDLE MyHandProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)。 BOOL bFlag=Process32First(MyHandProcessSnap,pProcessInfo)。 while (bFlag) { if (dwProcessId==pProcessInfoth32ProcessID) { wcscpy(szProcessName,pProcessInfoszExeFile)。 bReturnFlag=TRUE。 break。 } bFlag=Process32Next(MyHandProcessSnap,pProcessInfo)。 } if(pProcessInfo!=NULL) { delete pProcessInfo。 pProcessInfo=NULL。 } if (MyHandProcessSnap!=NULL) { CloseHandle(MyHandProcessSnap)。 } return bReturnFlag。 } //根据 PID 获取进程路径 BOOL MyGetProcessPathByPID(DWORD dwProcessId,WCHAR *szProcessPath) { HANDLE hModule。 MODULEENTRY32* pMoudleInfo=new MODULEENTRY32。 pMoudleInfodwSize=sizeof(MODULEENTRY32)。 hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwProcessId)。 Module32First(hModule,pMoudleInfo)。 wcscpy(szProcessPath,pMoudleInfoszExePath)。 if(pMoudleInfo!=NULL) { delete pMoudleInfo。 pMoudleInfo=NULL。 } if (hModule!=NULL) { CloseHandle(hModule)。 } return TRUE。 } 在看。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。