⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filedir.cpp

📁 这是一本学习 window编程的很好的参考教材
💻 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 + -