/******************************************************************************* * * 函 数 名 : DispatchDeviceControl * 功能描述 : * 参数列表 : pDriverObj -- * pIrp * 说 明 : * 返回结果 : 成功返回 STATUS_SUCCESS * *******************************************************************************/ NTSTATUS DispatchDeviceControl(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) { NTSTATUS status = STATUS_INVALID_DEVICE_REQUEST; // STATUS_UNSUCCESSFUL PIO_STACK_LOCATION pIrpStack = IoGetCurrentIrpStackLocation(pIrp); ULONG uIoControlCode = 0; PVOID pIoBuffer = NULL; ULONG uInSize = 0; ULONG uOutSize = 0; PHIDE_INFO pHi = NULL ; PPROTECT_PID_INFO pPi = NULL ; PPROTECT_NAME_INFO pNi = NULL ; PDEVICE_EXTENSION pde = (PDEVICE_EXTENSION)pDevObj->DeviceExtension ; // Get the IoCtrl Code uIoControlCode = pIrpStack->Parameters.DeviceIoControl.IoControlCode; // Get the buffer info pIoBuffer = pIrp->AssociatedIrp.SystemBuffer; uInSize = pIrpStack->Parameters.DeviceIoControl.InputBufferLength; uOutSize = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength; KdBreakPoint() ; KeWaitForSingleObject(&pde->DeviceIoControlMutex, Executive, KernelMode, FALSE, NULL) ; switch(uIoControlCode) { // 添加要保护的进程名 case IOCTRL_ADD_PROTECT_NAME: { pNi = (PPROTECT_NAME_INFO)pIoBuffer ; if (sizeof(PROTECT_NAME_INFO) != uInSize || NULL == pNi) { break ; } // 这里可以判断一下返回值 if(AddProtectProcessName(pNi->ProcessName)) { status = STATUS_SUCCESS ; } } break ; case IOCTRL_ADD_PROTECT_PID: { pPi = (PPROTECT_PID_INFO)pIoBuffer ; if (sizeof(PROTECT_PID_INFO) != uInSize || NULL == pPi) { break ; } // 这里可以判断一下返回值 if( AddProtectProcessPID(pPi->uPID)) { status = STATUS_SUCCESS ; } } break ; // 处理隐藏进程 case IOCTRL_HIDE: { // Receive data form Application //dprintf("IOCTRL_HIDE\r\n"); // Do we have any data? // 判断传进来的参数是否正确 pHi = (PHIDE_INFO)pIoBuffer ; if (sizeof(HIDE_INFO) != uInSize || NULL == pHi) { break ; } // 这里可以判断一下返回值 if( HideProcess(pDevObj, pHi->uPID) ) { status = STATUS_SUCCESS ; } } break ; case IOCTRL_START_FILTER: { if (! pde->bIsFiltrateProcess) { pde->bIsFiltrateProcess = true ; status = STATUS_SUCCESS ; } } break ; case IOCTRL_STOP_FILTER: { if (pde->bIsFiltrateProcess) { pde->bIsFiltrateProcess = false ; status = STATUS_SUCCESS ; } } break ; // // TODO: Add execute code here. // default: { // Invalid code sent dprintf("Unknown IOCTL: 0x%X (%04X,%04X)\r\n", uIoControlCode, DEVICE_TYPE_FROM_CTL_CODE(uIoControlCode), IoGetFunctionCodeFromCtlCode(uIoControlCode)); status = STATUS_INVALID_PARAMETER; } break; } if(status == STATUS_SUCCESS) { pIrp->IoStatus.Information = uOutSize; } else { pIrp->IoStatus.Information = 0; } // Complete the I/O Request pIrp->IoStatus.Status = status; KeReleaseMutex(&pde->DeviceIoControlMutex, FALSE) ; IoCompleteRequest(pIrp, IO_NO_INCREMENT); return status; }
int MyHideWindows() { NOTIFYICONDATA nid; if (bHideWindows == 1) { if (sOP.bDisableSound == 1) { CVolumeOutMaster OM; dwOldVolume = OM.GetCurrentVolume(); OM.SetCurrentVolume(0); CVolumeOutWave OW; dwOldWave = OW.GetCurrentVolume(); OW.SetCurrentVolume(0); //waveOutGetVolume(0,&dwOldVolume); //waveOutSetVolume(0,0); } EnableWindow(hAll,FALSE); EnableWindow(hLV,FALSE); for(int i1 = 0;i1<iBaSW_dll;i1++) { if(sW_dll[i1].bReserved != sOP.bReserveSel) { //ShowWindow(sW_dll[i1].hWnd,SW_HIDE); if(sOP.bHideProcess == 1) { HideProcess(sW_dll[i1].lPID); } sW_dll[i1].bHide = 1; sW_dll[i1].iLink = i1; // Use this member save thread handle index g_arrayHide[i1] = (HANDLE)_beginthreadex(NULL,0,HideWindowProc, sW_dll + i1,0,NULL); } } HANDLE hMonitorHandle = (HANDLE)_beginthreadex(NULL,0,MonitorProc, g_arrayHide,0,NULL); if(hMonitorHandle == INVALID_HANDLE_VALUE) { hMonitorHandle = NULL; } else { CloseHandle(hMonitorHandle); } if(sOP.bCleanAfterHide == 1) { g_pCleanHistory(); } if(sOP.bHideAllTray == 1) { AllocResourceForTrayList(); EnumAllVisibleTray_dll(); HideAllTray(); } dbview(L"enter sOP.bNeedStart == 1........................................"); if(sOP.bNeedStart == 1) { ShellExecute(NULL,L"open",sOP.cTrailRun,NULL,NULL,SW_SHOWNORMAL); } g_pClearTipText(); dbview(L"enter sOP.bUseMiddle........................................"); if(sOP.bUseMiddle) { g_pAppendTipText(L"IDS_USAGETIP_RECLICKMIDDLESHOWWINDOW", L"再按鼠标中键可以重新显示窗口。"); } else if(sOP.bUseMouse) { g_pAppendTipText(L"IDS_USAGETIP_RECLICKRIGHTLEFTSHOWWINDOW", L"再一齐按鼠标左右键可以重新显示窗口。"); } else { g_pAppendTipText(L"IDS_USAGETIP_REPRESSHOTKEYTOSHOWWINDOW", L"再按下 隐藏窗口 快捷键可以重新显示窗口。"); } if(sOP.bUseMiddle) { g_pSetTipText(L"IDS_USAGETIP_RECLICKMIDDLESHOWWINDOW", L"再按鼠标中键可以重新显示窗口。"); } else if(sOP.bUseMouse) { g_pSetTipText(L"IDS_USAGETIP_RECLICKRIGHTLEFTSHOWWINDOW", L"再一齐按鼠标左右键可以重新显示窗口。"); } else { g_pSetTipText(L"IDS_USAGETIP_REPRESSHOTKEYTOSHOWWINDOW", L"再按下 隐藏窗口 快捷键可以重新显示窗口。"); } dbview(L"enter bHideWindows = 0;........................................"); bHideWindows = 0; } else if (bHideWindows == 0) { if (sOP.bUsePassword == 1) { if(hDlg_Validate != NULL && IsWindow(hDlg_Validate)) { return 1; } if (DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_VALIDATE),NULL,(DLGPROC)ValidateProc) == 0) { return 1; } } EnableWindow(hAll,TRUE); EnableWindow(hLV,TRUE); RestoreVolume(); //2.2 method /// for (int i = 0;i < iBaSW_dll;i++) { if(sOP.bHideProcess == 1) { ShowProcess(sW_dll[i].lPID); } ShowWindow(sW_dll[i].hWnd,SW_SHOW); if(sW_dll[i].iHasTrayIcon == 1 && sW_dll[i].bHide == 1) { nid.cbSize = sizeof(NOTIFYICONDATA); nid.uFlags = NIF_ICON|NIF_TIP|NIF_MESSAGE; nid.uID = sW_dll[i].trayicon.uID; nid.hIcon = sW_dll[i].trayicon.hIcon; nid.hWnd = sW_dll[i].trayicon.hwnd; wcscpy(nid.szTip,(const wchar_t *)sW_dll[i].cIconTip); nid.uCallbackMessage = sW_dll[i].trayicon.uCallbackMessage; // Shell_NotifyIcon(NIM_ADD,&nid); { int iCommandId = sW_dll[i].iCommandId; HWND g_TrayWnd = FindTrayToolbarWindow(); SendMessageW(g_TrayWnd,TB_HIDEBUTTON,WPARAM(iCommandId), (LPARAM)MAKELONG(FALSE,0)); NOTIFYICONDATA nid2; memset(&nid2,0,sizeof(nid2)); nid2.cbSize=sizeof(nid2); nid2.hWnd=nid.hWnd; nid2.uID=nid.uID; nid2.uFlags=NIF_STATE; nid2.dwState=NIS_HIDDEN; ::SendMessage(g_TrayWnd,WM_SETREDRAW,(WPARAM)FALSE,0); Shell_NotifyIcon(NIM_MODIFY,&nid2); SendMessage(g_TrayWnd,WM_SETREDRAW,(WPARAM)TRUE,0); } // HANDLE hHideWndHandle = (HANDLE)_beginthreadex(NULL,0,HideWindowProc,sW_dll + i1,0,NULL); // if(hHideWndHandle == INVALID_HANDLE_VALUE) // { // g_arrayHide[i1] = NULL; // } // else // { // g_arrayHide[i1] = hHideWndHandle; // } } sW_dll[i].bHide = 0; } if(sOP.bAutoHide_QH == 1 && iBaSW_QH > 0) { for(i = 0;i < iBaSW_QH;i++) { ShowWindow(pArr_dll[i],SW_SHOW); } iBaSW_QH = 0; } if(sOP.bHideAllTray == 1) { ShowAllTray(); ReleaseResourceForTrayList_dll(); } bHideWindows = 1; g_pClearTipText(); if(sOP.bUseMiddle) { g_pAppendTipText(L"IDS_USAGETIP_CLICKMIDDLEHIDEWND", L"按鼠标中键可以隐藏窗口。"); } else if(sOP.bUseMouse) { g_pAppendTipText(L"IDS_USAGETIP_CLICKLEFTRIGHTHIDEWND", L"一齐按下鼠标左右键可以隐藏窗口。"); } else { g_pAppendTipText(L"IDS_USAGETIP_PRESSHOTKEYTOHIDEWINDOW", L"按下 隐藏窗口 的快捷键,即可隐藏窗口。"); } if(sOP.bReserveSel) { g_pAppendTipText(L"IDS_USAGETIP_SELWNDLISTCANRESERVEWND", L"您还可以在下边窗口列表里选择不想隐藏的窗口。"); } else { g_pAppendTipText(L"IDS_USAGETIP_HIDESELITEM", L"在 窗口列表 里被选择的窗口将被隐藏。"); } if(sOP.bUseMiddle) { g_pSetTipText(L"IDS_USAGETIP_CLICKMIDDLEHIDEWND", L"按鼠标中键可以隐藏窗口。"); } else if(sOP.bUseMouse) { g_pSetTipText(L"IDS_USAGETIP_CLICKLEFTRIGHTHIDEWND", L"一齐按下鼠标左右键可以隐藏窗口。"); } else { g_pSetTipText(L"IDS_USAGETIP_PRESSHOTKEYTOHIDEWINDOW", L"按下 隐藏窗口 的快捷键,即可隐藏窗口。"); } iHideComplete = 1; } return 1; }