📄 filedir.cpp
字号:
// FileDir.cpp : Implementation of CFileDir
#include "stdafx.h"
#include "Win98Hide.h"
#include "FileDir.h"
/////////////////////////////////////////////////////////////////////////////
// CFileDir
bool CFileDir::GetAppPath(TCHAR * szFilePath)
{
HKEY hKey;
HRESULT hr=RegOpenKeyEx(HKEY_CLASSES_ROOT,_TEXT("CLSID\\{6F107D65-CC3E-4CE1-AC4C-DA269E2C5603}\\InprocServer32"),NULL,KEY_ALL_ACCESS,&hKey);
if(hr!=ERROR_SUCCESS)return false;
DWORD dwType=REG_SZ;
DWORD cbData=MAX_PATH;
hr=RegQueryValueEx(hKey,NULL,NULL,&dwType,(LPBYTE)szFilePath,&cbData);
RegCloseKey(hKey);
if(hr!=ERROR_SUCCESS)return false;
DWORD dwCount=lstrlen(szFilePath);
int i=0;
while(szFilePath[dwCount-i-1]!='\\')
i++;
szFilePath[dwCount-i]='\0';
return true;
}
STDMETHODIMP CFileDir::StartHide(VARIANT *varResult)
{ if(hVxd!=NULL){
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_FALSE;
}
DWORD dwErrorCode;
char cPath[MAX_PATH];
GetAppPath(cPath);
// strcat(cPath, "Protector.dat");
DWORD RetInfo[2];
DWORD cbBytesReturned;
// Dynamically load and prepare to call CVXDSAMP
// The CREATE_NEW flag is not necessary
hVxd= CreateFile("\\\\.\\Hide98.VXD", 0,0,0,
CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
if ( hVxd== INVALID_HANDLE_VALUE )
{ hVxd=NULL;
dwErrorCode = GetLastError();
if ( dwErrorCode == ERROR_NOT_SUPPORTED )
{
MessageBox(NULL, "Unable to open VxD,\nDevice does not support DeviceIOCTL", "Protector Login", MB_OK);
}
else
{
MessageBox(NULL,"Unable to open VxD\n", "Protector Login", MB_OK);
}
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return S_FALSE;
}
else
{
if(!DeviceIoControl(hVxd, MEM_COPY,
(LPVOID)cPath, strlen(cPath),
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL)){
MessageBox(NULL, "Unable to set hidden Path!", "Protector Login", MB_OK);
CloseHandle(hVxd);
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return FALSE;
}
DeviceIoControl(hVxd, INSTALL_HOOK,
(LPVOID)NULL, 0,
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL);
}
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_OK;
}
STDMETHODIMP CFileDir::StopHide(VARIANT *varResult)
{
if(hVxd==NULL){
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_OK;
}
DWORD RetInfo[2];
DWORD cbBytesReturned;
DeviceIoControl(hVxd, REMOVE_HOOK,
(LPVOID)NULL, 0,
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL);
CloseHandle(hVxd);
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
hVxd=NULL;
return S_OK;
}
STDMETHODIMP CFileDir::EnableHide(VARIANT varEnable, VARIANT *varResult)
{
if(hVxd==NULL)
{
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_FALSE;
}
CComVariant var1(varEnable);
HRESULT hr=var1.ChangeType(VT_BOOL);
if(FAILED(hr)){
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return S_FALSE;
}
DWORD dwTemp=var1.boolVal?1:0;
DWORD RetInfo[2];
DWORD cbBytesReturned;
if(!DeviceIoControl(hVxd, DISABLE_HOOK,
(LPVOID)&dwTemp, sizeof DWORD ,
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL)){
MessageBox(NULL, "Unable to toggle Enablity!", "Protector Login", MB_OK);
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return S_FALSE;
}
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_OK;
}
STDMETHODIMP CFileDir::PathFromString(VARIANT varPath, VARIANT *varResult)
{
if(hVxd==NULL)
{
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_FALSE;
}
CComVariant var1(varPath);
HRESULT hr=var1.ChangeType(VT_BSTR);
if(FAILED(hr)){
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return S_FALSE;
}
USES_CONVERSION;
DWORD RetInfo[2];
DWORD cbBytesReturned;
char szFileName[MAX_PATH];
strcpy(szFileName,OLE2CA(var1.bstrVal));
if(!DeviceIoControl(hVxd, MEM_COPY,
(LPVOID)szFileName, strlen(szFileName),
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL)){
DeviceIoControl(hVxd, REMOVE_HOOK,
(LPVOID)NULL, 0,
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL);
CloseHandle(hVxd);
hVxd=NULL;
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return S_FALSE;
}
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_OK;
}
STDMETHODIMP CFileDir::PathFromFile(VARIANT varPath, VARIANT *varResult)
{
if(hVxd==NULL)
{
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_FALSE;
}
CComVariant var1(varPath);
HRESULT hr=var1.ChangeType(VT_BSTR);
if(FAILED(hr)){
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return S_FALSE;
}
USES_CONVERSION;
DWORD RetInfo[2];
DWORD cbBytesReturned;
char szFileName[MAX_PATH];
strcpy(szFileName,OLE2CA(var1.bstrVal));
if(!DeviceIoControl(hVxd, FILE_MEM_OPEN,
(LPVOID)szFileName, strlen(szFileName),
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL)){
DeviceIoControl(hVxd, REMOVE_HOOK,
(LPVOID)NULL, 0,
(LPVOID)RetInfo, sizeof(RetInfo),
&cbBytesReturned, NULL);
CloseHandle(hVxd);
hVxd=NULL;
MessageBox(NULL,"文件没找到","出错提示",MB_OK);
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_FALSE;
}
return S_FALSE;
}
if(varResult)
{
VariantInit(varResult);
varResult->vt=VT_BOOL;
varResult->boolVal=VARIANT_TRUE;
}
return S_OK;
}
STDMETHODIMP CFileDir::GetIDsOfNames(
GUID* riid,
OLECHAR** rgszNames,
unsigned int cNames,
unsigned long lcid,
long* rgdispid)
{
if(cNames>1)return E_INVALIDARG;
USES_CONVERSION;
char* szAnsi=OLE2A(rgszNames[0]);
if(strncmp(szAnsi,"PathFromFile",12)==0)
rgdispid[0]=DISPID_PATHFROMFILE;
else if(strncmp(szAnsi,"EnableHide",10)==0)
rgdispid[0]=DISPID_ENABLEHIDE;
else if(strncmp(szAnsi,"StopHide",8)==0)
rgdispid[0]=DISPID_STOPHIDE;
else if(strncmp(szAnsi,"StartHide",9)==0)
rgdispid[0]=DISPID_STARTHIDE;
else if(strncmp(szAnsi,"PathFromString",14)==0)
rgdispid[0]=DISPID_MEMSTRINGCPY;
else
return DISPID_UNKNOWN;
return S_OK;
}
STDMETHODIMP CFileDir::Invoke(DISPID dispidMember,REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS * pdispparams, VARIANT * pvarResult,
EXCEPINFO * pexcepinfo, UINT * puArgErr)
{
if(pdispparams->cNamedArgs>0)
return DISP_E_NONAMEDARGS;
switch (dispidMember)
{
case DISPID_STARTHIDE:
StartHide(pvarResult);
break;
case DISPID_ENABLEHIDE:
EnableHide(pdispparams->rgvarg[0],pvarResult);
break;
case DISPID_PATHFROMFILE:
PathFromFile(pdispparams->rgvarg[0],pvarResult);
break;
case DISPID_STOPHIDE:
StopHide(pvarResult);
break;
case DISPID_MEMSTRINGCPY:
PathFromString(pdispparams->rgvarg[0],pvarResult);
break;
default:
return DISP_E_MEMBERNOTFOUND;
}
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -