zoukankan      html  css  js  c++  java
  • 偶然发现某人写了这么一段代码

    // selfDeleteWin.cpp : Defines the entry point for the application.
    //


    #include "stdafx.h"
    #include <Windows.h>
    #include <stdlib.h>
    #include <tchar.h>


    int WINAPI WinMain(HINSTANCE h, HINSTANCE b, LPSTR psz, int n){
    // Is this the Original EXE or the clone EXE?
    // If the command-line 1 argument, this is the Original EXE
    // If the command-line >1 argument, this is the clone EXE
    if (__argc == 1){
    // Original EXE: Spawn clone EXE to delete this EXE
    // Copy this EXEcutable image into the user's temp directory
    TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];
    GetModuleFileName(NULL, szPathOrig, _MAX_PATH);
    GetTempPath(_MAX_PATH, szPathClone);
    GetTempFileName(szPathClone, __TEXT("Del"), 0, szPathClone); 
    CopyFile(szPathOrig, szPathClone, FALSE);
    //***注意了***: 
    // Open the clone EXE using FILE_FLAG_DELETE_ON_CLOSE
    HANDLE hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL);
    // Spawn the clone EXE passing it our EXE's process handle
    // and the full path name to the Original EXE file.
    TCHAR szCmdLine[512];
    HANDLE hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE, GetCurrentProcessId());
    wsprintf(szCmdLine, __TEXT("%s %d \"%s\""), szPathClone, hProcessOrig, szPathOrig);
    STARTUPINFO si;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    PROCESS_INFORMATION pi;
    CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
    CloseHandle(hProcessOrig);
    CloseHandle(hfile);
    // This original process can now terminate.
    } else {
    // Clone EXE: When original EXE terminates, delete it
    HANDLE hProcessOrig = (HANDLE) _ttoi(__targv[1]);
    WaitForSingleObject(hProcessOrig, INFINITE);
    CloseHandle(hProcessOrig);
    DeleteFile(__targv[2]);
    // Insert code here to remove the subdirectory too (if desired).
    // The system will delete the clone EXE automatically 
    // because it was opened with FILE_FLAG_DELETE_ON_CLOSE
    }
    return(0);
    }
  • 相关阅读:
    Reverse Bits
    Number of 1 Bits
    Single Number,Single Number II
    Repeated DNA Sequences
    Fraction to Recurring Decimal
    Isomorphic Strings
    Valid Sudoku
    Count Primes
    Bulls and Cows
    高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题
  • 原文地址:https://www.cnblogs.com/eaglezzb/p/4176517.html
Copyright © 2011-2022 走看看