精华内容
下载资源
问答
  • 修改 如何解除文件占用
    2022-06-29 09:58:20

    LS说KILL进程的朋友们···我说。。。你们真行!!!如果用户是administrator还行,如果不是怎么办??你是没有权限KILL滴!!!
     

    object objmissing = System.Reflection.Missing.Value;
    
    
    
    Excel.ApplicationClass application = new ApplicationClass();
    
    Excel.Workbook book = application.Workbooks.Add(objmissing);
    
    Excel.Worksheet sheet = (Excel.Worksheet)book.Worksheets.Add(objmissing,objmissing,objmissing,objmissing);
    
    
    
    //操作过程 ^&%&×&……&%&&……
    
    
    
    //释放
    
    sheet.SaveAs(path,objmissing,objmissing,objmissing,objmissing,objmissing,objmissing,objmissing,objmissing);
    
    System.Runtime.InteropServices.Marshal.ReleaseComObject((object)sheet);
    
    System.Runtime.InteropServices.Marshal.ReleaseComObject((object)book);
    
    application.Quit();
    
    System.Runtime.InteropServices.Marshal.ReleaseComObject((object)application);
    
    System.GC.Collect();



    有一点,在网上你是找不到滴···纯属经验:
    如果你要写的Excel是多个Sheet的话,那么你最好写个函数:
    比如 private bool overdue_report_sub(Excel.Worksheet sheet)
    将sheet的对象传进去,在这个函数中进行操作,函数过程只写Sheet的操作过程,释放还是放在外面。如果你不这样做的话,那么,恭喜你,你还是释放不掉。但是如果只有一个Sheet操作的话,你就可以不用写这个函数了,只是在整个函数体中进行创建和释放。

    更多相关内容
  • 解除共享文件占用.rar

    2020-05-19 14:38:22
    运行此脚本吧,完美解决共享文件占用,或者共享用户多的问题,也可以设置间隔时间自动清理共享用户,方便文件操作。某用户打开共享文件,不关机,共享的老板又找不到是谁,直接运行批处理,踢出所有共享文件访问用户...
  • VB 实现文件占用和解除文件占用

    热门讨论 2011-01-31 23:45:35
    在安装完毕360安全卫士7.6版的时候,文件右键菜单会增加两个项,其中一个是“用360解除文件占用”。其实,“文件占用”是软件的一种安全措施,用来防止正在使用的文件遭到其他更改或删除,从而提高了软件的稳定性和...
  • C++解除文件占用

    千次阅读 2016-06-22 16:58:50
    1.解除文件占用,其过程比较简单,当然在寻找这个过程还是吃了不少苦头的,首先呢,我们需要,遍历系统中所有的文件句柄该过程呢,就要是检测句柄类型,如果是28,则可以认为是文件,然后检测先该文件名是不是我们...

    1.解除文件占用,其过程比较简单,当然在寻找这个过程还是吃了不少苦头的,首先呢,我们需要,遍历系统中所有的文件句柄该过程呢,就要是检测句柄类型,如果是28,则可以认为是文件,然后检测先该文件名是不是我们需要的,如果是我们需要的,则要记录下该句柄的ProcessId,然后再打开该进程,然后向该进程中注入远程线程,关掉该文件即可

    现在呢,实现了,可以遍历系统中所有正在使用的文件


    #include"stdafx.h"


    #include <stdio.h>
    #include <tchar.h>
    #include <windows.h>
    #include <psapi.h>
    #include <strsafe.h>
    #include <assert.h>
    #include<iostream>
    #include<fstream>
    using namespace std;
    #pragma comment(lib,"PSAPI.LIB")
    //#pragma comment(lib,"Ntoskrnl.lib")




    typedef struct _IO_STATUS_BLOCK {
    union {
    NTSTATUS Status;
    PVOID    Pointer;
    };
    ULONG_PTR Information;
    } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;


    typedef struct _SYSTEM_HANDLE
    {
    ULONG ProcessId;
    UCHAR ObjectTypeNumber;
    UCHAR Flags;
    USHORT Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
    } SYSTEM_HANDLE,*PSYSTEM_HANDLE;


    typedef struct _SYSTEM_HANDLE_INFORMATION
    {
    ULONG NumberOfHandles;
    SYSTEM_HANDLE HandleInfo[1];
    }SYSTEM_HANDLE_INFORMATION,*PSYSTEM_HANDLE_INFORMATION;




    typedef enum _SYSTEM_INFORMATION_CLASS {


    SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, SystemPathInformation, SystemProcessInformation, SystemCallCountInformation, SystemDeviceInformation, SystemProcessorPerformanceInformation, SystemFlagsInformation, SystemCallTimeInformation, SystemModuleInformation, SystemLocksInformation, SystemStackTraceInformation, SystemPagedPoolInformation, SystemNonPagedPoolInformation, SystemHandleInformation, SystemObjectInformation, SystemPageFileInformation, SystemVdmInstemulInformation, SystemVdmBopInformation, SystemFileCacheInformation, SystemPoolTagInformation, SystemInterruptInformation, SystemDpcBehaviorInformation, SystemFullMemoryInformation, SystemLoadGdiDriverInformation, SystemUnloadGdiDriverInformation, SystemTimeAdjustmentInformation, SystemSummaryMemoryInformation, SystemNextEventIdInformation, SystemEventIdsInformation, SystemCrashDumpInformation, SystemExceptionInformation, SystemCrashDumpStateInformation, SystemKernelDebuggerInformation, SystemContextSwitchInformation, SystemRegistryQuotaInformation, SystemExtendServiceTableInformation, SystemPrioritySeperation, SystemPlugPlayBusInformation, SystemDockInformation, SystemProcessorSpeedInformation, SystemCurrentTimeZoneInformation, SystemLookasideInformation


    } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;






    typedef enum _FILE_INFORMATION_CLASS { 
    FileDirectoryInformation                 = 1,
    FileFullDirectoryInformation,
    FileBothDirectoryInformation,
    FileBasicInformation,
    FileStandardInformation,
    FileInternalInformation,
    FileEaInformation,
    FileAccessInformation,
    FileNameInformation,
    FileRenameInformation,
    FileLinkInformation,
    FileNamesInformation,
    FileDispositionInformation,
    FilePositionInformation,
    FileFullEaInformation,
    FileModeInformation,
    FileAlignmentInformation,
    FileAllInformation,
    FileAllocationInformation,
    FileEndOfFileInformation,
    FileAlternateNameInformation,
    FileStreamInformation,
    FilePipeInformation,
    FilePipeLocalInformation,
    FilePipeRemoteInformation,
    FileMailslotQueryInformation,
    FileMailslotSetInformation,
    FileCompressionInformation,
    FileObjectIdInformation,
    FileCompletionInformation,
    FileMoveClusterInformation,
    FileQuotaInformation,
    FileReparsePointInformation,
    FileNetworkOpenInformation,
    FileAttributeTagInformation,
    FileTrackingInformation,
    FileIdBothDirectoryInformation,
    FileIdFullDirectoryInformation,
    FileValidDataLengthInformation,
    FileShortNameInformation,
    FileIoCompletionNotificationInformation,
    FileIoStatusBlockRangeInformation,
    FileIoPriorityHintInformation,
    FileSfioReserveInformation,
    FileSfioVolumeInformation,
    FileHardLinkInformation,
    FileProcessIdsUsingFileInformation,
    FileNormalizedNameInformation,
    FileNetworkPhysicalNameInformation,
    FileIdGlobalTxDirectoryInformation,
    FileIsRemoteDeviceInformation,
    FileAttributeCacheInformation,
    FileNumaNodeInformation,
    FileStandardLinkInformation,
    FileRemoteProtocolInformation,
    FileReplaceCompletionInformation,
    FileMaximumInformation
    } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;




    typedef struct _FILE_NAME_INFORMATION {
    ULONG FileNameLength;
    WCHAR FileName[1];
    } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;




    HANDLE hCopy;




    typedef enum _OBJECT_INFORMATION_CLASS {


    ObjectBasicInformation, ObjectNameInformation, ObjectTypeInformation, ObjectAllInformation, ObjectDataInformation


    } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;


    typedef struct _LSA_UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR  Buffer;
    } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING;






    typedef struct _OBJECT_NAME_INFORMATION {


    UNICODE_STRING Name; WCHAR NameBuffer[0];


    } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
    typedef long(__stdcall*PNtQueryObject)(HANDLE ObjectHandle,ULONG ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);




    //声明Native API函数
    typedef NTSTATUS (WINAPI *NTQUERYSYSTEMINFOMATION)(
    IN SYSTEM_INFORMATION_CLASS SystemClass,
    OUT LPVOID SystemInfo,
    IN ULONG SystemInfoLength,
    OUT PULONG ReturnLength
    );








    char filename[256]={0};




    DWORD WINAPI GetFileName(LPVOID p )
    {
    int* ProcessId=(int*)p;
    HMODULE hNtDll=LoadLibrary(L"ntdll.dll");
    if(hNtDll==NULL)
    {
    return 0;
    }
    PNtQueryObject NtQueryObject=(PNtQueryObject)GetProcAddress(hNtDll,"NtQueryObject");
    POBJECT_NAME_INFORMATION pObject=NULL;
    pObject=(POBJECT_NAME_INFORMATION)HeapAlloc(GetProcessHeap(),0,MAX_PATH*2);
    memset(pObject,0,MAX_PATH*2);
    ULONG returnLength;
    DWORD dwReturn=NtQueryObject(hCopy,ObjectNameInformation,pObject,MAX_PATH*2,&returnLength);
    //将卷路径名修改成盘符路径

    if((pObject->NameBuffer!=NULL)&&(dwReturn==0))
    {
    DWORD n=WideCharToMultiByte(CP_OEMCP,NULL,pObject->NameBuffer,-1,NULL,0,NULL,FALSE);
       char* name=new char[n+1];
    memset(name,0,n+1);
    WideCharToMultiByte(CP_OEMCP,NULL,pObject->NameBuffer,-1,name,n,NULL,FALSE);
    char tmp[256]={0};
    sprintf(tmp,"%d",ProcessId);
    if(strstr(name,filename))
    {
    cout<<"该进程ID 是"<<*ProcessId<<endl;
    }
    // cout<<name<<endl;
    ofstream out("E:\\result.txt",ios::app);
    out.write(name,strlen(name));
    out.write("\n",strlen("\n"));
    out.close();
    delete[] name;
    }
    HeapFree(GetProcessHeap(),0,pObject);
    return dwReturn;
    }


    //根据进程ID获取当前进程所使用的所有文件的句柄
    void EnumFileHandle(DWORD pid)
    {
    HMODULE hNtDll=LoadLibrary(L"ntdll.dll");
    if(hNtDll==NULL)
    {
    return;
    }
    //开始获取,其他API地址
    NTQUERYSYSTEMINFOMATION NtQuerySystemInformation=(NTQUERYSYSTEMINFOMATION)
    GetProcAddress(hNtDll,"NtQuerySystemInformation");
    if(NtQuerySystemInformation==NULL)
    {
    return;
    }
    //开始为我们需要信息开辟内存
    DWORD nSize=4096,nReturn=0;
    PSYSTEM_HANDLE_INFORMATION pHandleInfo=(PSYSTEM_HANDLE_INFORMATION) HeapAlloc(GetProcessHeap(),0,nSize);
    while(NtQuerySystemInformation(SystemHandleInformation,pHandleInfo,nSize,&nReturn)==0xc0000004)
    {
    HeapFree(GetProcessHeap(),0,pHandleInfo);
    nSize+=4096;
    pHandleInfo=(PSYSTEM_HANDLE_INFORMATION)HeapAlloc(GetProcessHeap(),0,nSize);
    }
    //这样就开辟成功了
    //然后打开指定的进程


    DWORD dwFileCount=0;
    for(ULONG i=0;i<pHandleInfo->NumberOfHandles;i++)
    {
    PSYSTEM_HANDLE pHandle=(PSYSTEM_HANDLE)&(pHandleInfo->HandleInfo[i]);


    if((pHandle->ObjectTypeNumber==0x1c)&&(pHandle->ProcessId!=4))
    {
    //如果是当前进程的某个文件,这说明,该进程下有文件操作
    HANDLE hProcess=OpenProcess(PROCESS_DUP_HANDLE|PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pHandle->ProcessId);
    if(hProcess==NULL)
    {
    int a=GetLastError();
    // cout<<"OpenProcess "<<a<<endl;
    continue;
    }


    if(!DuplicateHandle(hProcess,(HANDLE)pHandle->Handle,GetCurrentProcess(),&hCopy,MAXIMUM_ALLOWED,FALSE,0))
    {
    continue;
    }
    int curID=pHandle->ProcessId;
    HANDLE hThread=CreateThread(NULL,0,GetFileName,(LPVOID)&curID,0,NULL);
    if(WaitForSingleObject(hThread,100)==WAIT_TIMEOUT)
    {
    TerminateThread(hThread,0);
    }
    CloseHandle(hThread);
    CloseHandle(hCopy);
    hCopy=0;
    CloseHandle(hProcess);
    hProcess=0;
    }
    }
    HeapFree(GetProcessHeap(),0,pHandleInfo);
    }




    bool EnableDebugPrivilege()   
    {   
    HANDLE hToken;   
    LUID sedebugnameValue;   
    TOKEN_PRIVILEGES tkp;   
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {   
    return   FALSE;   
    }   
    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))  
    {   
    CloseHandle(hToken);   
    return false;   
    }   
    tkp.PrivilegeCount = 1;   
    tkp.Privileges[0].Luid = sedebugnameValue;   
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   
    if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) 
    {   
    CloseHandle(hToken);   
    return false;   
    }   
    return true;   
    }
    int main()
    {
    cout<<"请输入查找的文件名称"<<endl;
    cin>>filename;
    EnableDebugPrivilege();
    HANDLE hFile1=CreateFile(L"D:\\2.txt", GENERIC_READ,0, NULL, OPEN_EXISTING, 0, NULL);
    DWORD dwTmp;
    WriteFile(hFile1,L"DASD",4,&dwTmp,NULL);
    EnumFileHandle(::GetCurrentProcessId());
    CloseHandle(hFile1);
    system("pause");
    return 0;
    }




    这样就能根据文件名称获得该文件所在的进程ID了,不足的是我们使用的是28,也就是32bit的win7的文件句柄类型,如果是其他系统,则应该注意修改之

    展开全文
  • 解决了playsound模块无法解除文件占用的问题。 使用方法: 在python安装目录下的 ~\Python37\Lib\site-packages 找到playsound.py 替换即可。 参考文章:...
  • 文件占用怎么解除

    2021-05-24 07:07:42
    关闭正在使用的程序来解除占用:1、比如说我们前面刚使用过ps打开各种psd源文件来修改一些图片。当我们把那个存放了psd源文件的文件夹移动的时候,就会发现它移动不了,显示文件夹正在使用。2、这个时候,如果我们...

    关闭正在使用的程序来解除被占用:

    1、比如说我们前面刚使用过ps打开各种psd源文件来修改一些图片。当我们把那个存放了psd源文件的文件夹移动的时候,就会发现它移动不了,显示文件夹正在使用。

    78e1cb255d3a096e680e9926ea5fcdb2.png

    9c3f0e91082f40b29e1b48bff378240a.png

    2、这个时候,如果我们的ps软件里面仅仅是打开了一个图片文件,那么,我们就可以在ps软件里面,点击界面右上角的打叉按钮,关闭那个ps程序。

    ded375b50ae111bd5769983b41abc3c8.png

    3、如果我们ps里面同时打开了很多个文件,在界面里面点击关闭的按钮,容易出现一个又一个的是否保存的提示。如果我们之前保存过了,现在不需要保存了,又要一个个关闭就很麻烦了。

    6e8595345e564d18a4dd351648d8232f.png

    50367aaeb71dddc2721c23cdda3440a6.png

    4、这个时候,我们可以利用360软件小助手来快速解决它。点击下360软件小助手的图标,在弹出来的界面上,把鼠标放到“一键加速”的上面,接着在弹出来的小窗口里面,勾选中目前正在使用的ps软件后,再点击下面的“一键加速”,即可马上关闭掉整个ps软件。这个在需要的时候使用起来就很方便了。

    cf07577f4ce7769fa4ecdaaf13911436.png

    用备份的方法来解除被占用:

    1、有些时候,我们不想关闭目前正在使用的软件程序,因为我们后面还需要继续使用,或者很多东西正在编辑着。这时候怎么办呢?小编平时的处理办法就是利用备份的方法来解决这个文件被占用的情况的。原来的文件被占用,但是如果我们右击那个文件或者文件夹,选择复制,再在我们需要存放的位置上,在空白的位置上右击,选择粘贴,即可成功复制出一份文件。而这个被复制出来的文件跟原来的文件是一样的内容,但是它是不会被占用的。

    67952479b8dff06411c41f266b463096.png

    5946a383bef445d476d360031709ab82.png

    2、当小伙伴们使用过文件以后,原来的那个不需要了,但不能删除,而又想要删掉的话,还可以考虑强力删除的方法。右击那个文件夹,在弹出来的列表里面选择“使用360强力删除”,接着再选择“粉碎文件”即可。

    3872443f5107af9474622fa4ee13f86e.png

    6841b9aac15253b872682f7e9484dcee.png

    使用360解除占用命令来解除被占用:

    1、比如说,现在我们正在打开了一个word的文档,在word里面正修改整理一些内容,忽然想要重命名原来的那个word文件,我们直接修改word文档的名字,会发现它也是会提示被占用,不能修改的。

    86708ee7a71c4e9da1a8d981a9e12687.png

    8f7da62360d77daa13fd6d425b2985fa.png

    2、这个时候,小伙伴们可以鼠标右击那个需要改名字的word文档,在列表选项里面,选中那个“使用360解除占用”。

    a2cb5035f94eea25b3a6d4f46568e1fe.png

    3、在打开像下图展示的“360文件解锁”界面上,小伙伴们先点击“解锁”,再在弹出来的提示窗口里“确定”。

    4a30efd25d73d44ba6087b5059254226.png

    66b5133450bb8cda22489588fbeffed4.png

    4、解锁完成以后,小伙伴们再来修改刚才那个word文档的名字,就会发现它可以直接修改啦。

    2db160ad310319cd711edfa433420195.png

    fd45530f0b0d5c80f146783fa309f3e7.png

    展开全文
  • vc 解除文件占用

    千次阅读 2017-05-24 18:19:25
    //将卷路径名修改成盘符路径 if((pObject->NameBuffer!=NULL)&&(dwReturn==0)) { DWORD n=WideCharToMultiByte(CP_OEMCP,NULL,pObject->NameBuffer,-1,NULL,0,NULL,FALSE); char* name=new char[n+1]; memset...
    #include"stdafx.h"
    
    
    #include <stdio.h>
    #include <tchar.h>
    #include <windows.h>
    #include <psapi.h>
    #include <strsafe.h>
    #include <assert.h>
    #include<iostream>
    #include<fstream>
    using namespace std;
    #pragma comment(lib,"PSAPI.LIB")
    //#pragma comment(lib,"Ntoskrnl.lib")
    
    
    
    
    typedef struct _IO_STATUS_BLOCK {
    union {
    NTSTATUS Status;
    PVOID    Pointer;
    };
    ULONG_PTR Information;
    } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
    
    
    typedef struct _SYSTEM_HANDLE
    {
    ULONG ProcessId;
    UCHAR ObjectTypeNumber;
    UCHAR Flags;
    USHORT Handle;
    PVOID Object;
    ACCESS_MASK GrantedAccess;
    } SYSTEM_HANDLE,*PSYSTEM_HANDLE;
    
    
    typedef struct _SYSTEM_HANDLE_INFORMATION
    {
    ULONG NumberOfHandles;
    SYSTEM_HANDLE HandleInfo[1];
    }SYSTEM_HANDLE_INFORMATION,*PSYSTEM_HANDLE_INFORMATION;
    
    
    
    
    typedef enum _SYSTEM_INFORMATION_CLASS {
    
    
    SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, SystemPathInformation, SystemProcessInformation, SystemCallCountInformation, SystemDeviceInformation, SystemProcessorPerformanceInformation, SystemFlagsInformation, SystemCallTimeInformation, SystemModuleInformation, SystemLocksInformation, SystemStackTraceInformation, SystemPagedPoolInformation, SystemNonPagedPoolInformation, SystemHandleInformation, SystemObjectInformation, SystemPageFileInformation, SystemVdmInstemulInformation, SystemVdmBopInformation, SystemFileCacheInformation, SystemPoolTagInformation, SystemInterruptInformation, SystemDpcBehaviorInformation, SystemFullMemoryInformation, SystemLoadGdiDriverInformation, SystemUnloadGdiDriverInformation, SystemTimeAdjustmentInformation, SystemSummaryMemoryInformation, SystemNextEventIdInformation, SystemEventIdsInformation, SystemCrashDumpInformation, SystemExceptionInformation, SystemCrashDumpStateInformation, SystemKernelDebuggerInformation, SystemContextSwitchInformation, SystemRegistryQuotaInformation, SystemExtendServiceTableInformation, SystemPrioritySeperation, SystemPlugPlayBusInformation, SystemDockInformation, SystemProcessorSpeedInformation, SystemCurrentTimeZoneInformation, SystemLookasideInformation
    
    
    } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
    
    
    
    
    
    
    typedef enum _FILE_INFORMATION_CLASS { 
    FileDirectoryInformation                 = 1,
    FileFullDirectoryInformation,
    FileBothDirectoryInformation,
    FileBasicInformation,
    FileStandardInformation,
    FileInternalInformation,
    FileEaInformation,
    FileAccessInformation,
    FileNameInformation,
    FileRenameInformation,
    FileLinkInformation,
    FileNamesInformation,
    FileDispositionInformation,
    FilePositionInformation,
    FileFullEaInformation,
    FileModeInformation,
    FileAlignmentInformation,
    FileAllInformation,
    FileAllocationInformation,
    FileEndOfFileInformation,
    FileAlternateNameInformation,
    FileStreamInformation,
    FilePipeInformation,
    FilePipeLocalInformation,
    FilePipeRemoteInformation,
    FileMailslotQueryInformation,
    FileMailslotSetInformation,
    FileCompressionInformation,
    FileObjectIdInformation,
    FileCompletionInformation,
    FileMoveClusterInformation,
    FileQuotaInformation,
    FileReparsePointInformation,
    FileNetworkOpenInformation,
    FileAttributeTagInformation,
    FileTrackingInformation,
    FileIdBothDirectoryInformation,
    FileIdFullDirectoryInformation,
    FileValidDataLengthInformation,
    FileShortNameInformation,
    FileIoCompletionNotificationInformation,
    FileIoStatusBlockRangeInformation,
    FileIoPriorityHintInformation,
    FileSfioReserveInformation,
    FileSfioVolumeInformation,
    FileHardLinkInformation,
    FileProcessIdsUsingFileInformation,
    FileNormalizedNameInformation,
    FileNetworkPhysicalNameInformation,
    FileIdGlobalTxDirectoryInformation,
    FileIsRemoteDeviceInformation,
    FileAttributeCacheInformation,
    FileNumaNodeInformation,
    FileStandardLinkInformation,
    FileRemoteProtocolInformation,
    FileReplaceCompletionInformation,
    FileMaximumInformation
    } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
    
    
    
    
    typedef struct _FILE_NAME_INFORMATION {
    ULONG FileNameLength;
    WCHAR FileName[1];
    } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
    
    
    
    
    HANDLE hCopy;
    
    
    
    
    typedef enum _OBJECT_INFORMATION_CLASS {
    
    
    ObjectBasicInformation, ObjectNameInformation, ObjectTypeInformation, ObjectAllInformation, ObjectDataInformation
    
    
    } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
    
    
    typedef struct _LSA_UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR  Buffer;
    } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING, UNICODE_STRING, *PUNICODE_STRING;
    
    
    
    
    
    
    typedef struct _OBJECT_NAME_INFORMATION {
    
    
    UNICODE_STRING Name; WCHAR NameBuffer[0];
    
    
    } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
    typedef long(__stdcall*PNtQueryObject)(HANDLE ObjectHandle,ULONG ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);
    
    
    
    
    //声明Native API函数
    typedef NTSTATUS (WINAPI *NTQUERYSYSTEMINFOMATION)(
    IN SYSTEM_INFORMATION_CLASS SystemClass,
    OUT LPVOID SystemInfo,
    IN ULONG SystemInfoLength,
    OUT PULONG ReturnLength
    );
    
    
    
    
    
    
    
    
    char filename[256]={0};
    
    
    
    
    DWORD WINAPI GetFileName(LPVOID p )
    { 
    int* ProcessId=(int*)p;
    HMODULE hNtDll=LoadLibrary(L"ntdll.dll");
    if(hNtDll==NULL)
    {
    return 0;
    }
    PNtQueryObject NtQueryObject=(PNtQueryObject)GetProcAddress(hNtDll,"NtQueryObject");
    
    POBJECT_NAME_INFORMATION pObject=NULL;
    pObject=(POBJECT_NAME_INFORMATION)HeapAlloc(GetProcessHeap(),0,MAX_PATH*2);
    memset(pObject,0,MAX_PATH*2);
    ULONG returnLength;
    DWORD dwReturn=NtQueryObject(hCopy,ObjectNameInformation,pObject,MAX_PATH*2,&returnLength);
    //将卷路径名修改成盘符路径
    
    
    if((pObject->NameBuffer!=NULL)&&(dwReturn==0))
    {
    DWORD n=WideCharToMultiByte(CP_OEMCP,NULL,pObject->NameBuffer,-1,NULL,0,NULL,FALSE);
       char*  name=new char[n+1];
    memset(name,0,n+1);
    WideCharToMultiByte(CP_OEMCP,NULL,pObject->NameBuffer,-1,name,n,NULL,FALSE);
    
    char tmp[256]={0};
    sprintf(tmp,"%d",ProcessId);
    if(strstr(name,filename))
    {
    cout<<"该进程ID 是"<<*ProcessId<<endl;
    
    }
    // cout<<name<<endl;
    ofstream out("E:\\result.txt",iOS::app);
    out.write(name,strlen(name));
    out.write("\n",strlen("\n"));
    out.close();
    delete[] name;
    }
    HeapFree(GetProcessHeap(),0,pObject);
    return dwReturn;
    }
    
    
    //根据进程ID获取当前进程所使用的所有文件的句柄
    void EnumFileHandle(DWORD pid)
    {
    HMODULE hNtDll=LoadLibrary(L"ntdll.dll");
    if(hNtDll==NULL)
    {
    return;
    }
    //开始获取,其他API地址
    NTQUERYSYSTEMINFOMATION NtQuerySystemInformation=(NTQUERYSYSTEMINFOMATION)
    GetProcAddress(hNtDll,"NtQuerySystemInformation");
    if(NtQuerySystemInformation==NULL)
    {
    return;
    } 
    //开始为我们需要信息开辟内存
    DWORD nSize=4096,nReturn=0;
    PSYSTEM_HANDLE_INFORMATION pHandleInfo=(PSYSTEM_HANDLE_INFORMATION)
    HeapAlloc(GetProcessHeap(),0,nSize);
    while(NtQuerySystemInformation(SystemHandleInformation,pHandleInfo,nSize,&nReturn)==0xc0000004)
    {
    HeapFree(GetProcessHeap(),0,pHandleInfo);
    nSize+=4096;
    pHandleInfo=(PSYSTEM_HANDLE_INFORMATION)HeapAlloc(GetProcessHeap(),0,nSize);
    }
    //这样就开辟成功了
    //然后打开指定的进程
    
    
    DWORD dwFileCount=0;
    
    for(ULONG i=0;i<pHandleInfo->NumberOfHandles;i++)
    {
    PSYSTEM_HANDLE pHandle=(PSYSTEM_HANDLE)&(pHandleInfo->HandleInfo[i]);
    
    
    if((pHandle->ObjectTypeNumber==0x1c)&&(pHandle->ProcessId!=4))
    { 
    //如果是当前进程的某个文件,这说明,该进程下有文件操作
    
    HANDLE hProcess=OpenProcess(PROCESS_DUP_HANDLE|PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pHandle->ProcessId);
    if(hProcess==NULL)
    {
    int a=GetLastError();
    // cout<<"OpenProcess "<<a<<endl;
    continue;
    }
    
    
    if(!DuplicateHandle(hProcess,(HANDLE)pHandle->Handle,GetCurrentProcess(),&hCopy,MAXIMUM_ALLOWED,FALSE,0))
    {
    continue;
    } 
    int curID=pHandle->ProcessId;
    HANDLE hThread=CreateThread(NULL,0,GetFileName,(LPVOID)&curID,0,NULL);
    if(WaitForSingleObject(hThread,100)==WAIT_TIMEOUT)
    {
    TerminateThread(hThread,0);
    }
    CloseHandle(hThread);
    CloseHandle(hCopy);
    hCopy=0;
    CloseHandle(hProcess);
    hProcess=0;
    }
    }
    HeapFree(GetProcessHeap(),0,pHandleInfo);
    }
    
    
    
    
    bool EnableDebugPrivilege()   
    {   
    HANDLE hToken;   
    LUID sedebugnameValue;   
    TOKEN_PRIVILEGES tkp;   
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {   
    return   FALSE;   
    }   
    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))  
    {   
    CloseHandle(hToken);   
    return false;   
    }   
    tkp.PrivilegeCount = 1;   
    tkp.Privileges[0].Luid = sedebugnameValue;   
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   
    if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) 
    {   
    CloseHandle(hToken);   
    return false;   
    }   
    return true;   
    }
    int main()
    {
    cout<<"请输入查找的文件名称"<<endl;
    cin>>filename;
    EnableDebugPrivilege();
    HANDLE hFile1=CreateFile(L"D:\\2.txt", GENERIC_READ,0, NULL, OPEN_EXISTING, 0, NULL);
    DWORD dwTmp;
    WriteFile(hFile1,L"DASD",4,&dwTmp,NULL);
    EnumFileHandle(::GetCurrentProcessId());
    
    CloseHandle(hFile1);
    system("pause");
    return 0;
    }

    展开全文
  • 我们在计算机管理里可以查看到所有被共享用户占用文件,计算机管理直接搜一下名称就出来了。...注: 这个关闭后要快速去修改文件,不然过段时间可能还会被占用。 如果想长时间防止别人再占用,可以先取消共享。
  • 复制代码 代码如下: Thread parameterThread_t = null; private void Print_DetailForm_Shown... 本文标题: C#解决文件占用资源,无法删除或修改的方法 本文地址: http://www.cppcns.com/ruanjian/csharp/152499.html
  • 当点击中止按钮(button1_Click)中止线程再继续执行,并且释放当前线程占用文件资源。 关键:parameterThread_t.Abort();parameterThread_t.Join(); GC.Collect();意思是,把线程Abort()停止线程执行,Join();...
  • 解除文件占用

    2019-09-25 11:31:53
    1. dll 占用 用管理员权限打开命令提示符。 tasklist /m >...2. 查看文件占用工具(下载) handle.exe 使用方法: 进入文件保存位置,地址栏输入CMD进入命令行模式。以下为部分用法: 1. ha...
  • 【语言-c#】文件占用如何解除

    千次阅读 2019-05-25 11:46:36
    1、加载文件后,删除文件时提示如下 文件“..jpg”正由另一进程使用,因此该进程无法访问此文件。 背景 C# 中使用Image.FromFile(string path)并使用System.IO.File.Delete(string path)后提示该文件正在被另一...
  • 实际上,只要root用户更改文件的属性,仍可以将其删除。 用户想要在Linux中删除文件,但是不能未经许可将其删除,只能由root用户删除,但是同样的结果表明不能删除该文件。 我该怎么办? 让我们来看看解决方案。...
  • Qt判断文件是否被占用,是否可修改

    千次阅读 2020-11-24 15:39:21
    这2个类都没有明确给出API如何判断一个文件是否被占用,是否能被修改、删除等。 网上也没有人发在Qt下如何实现的。 由于自己需要使用这个功能,没办法,只有自己想办法。想来想去,也没有好主意,只能来硬的。 实现...
  • Python程序占用RAM

    2020-11-29 15:41:38
    数据被转储到CSV文件中.我在SO和其他地方看过几篇帖子.提到的一些事情是:>尽可能使用延迟评估(xrange而不是范围)>删除大量未使用的对象>使用子进程并在其死亡时由OS发布内存该脚本在github here上.我还使用script...
  • 软件卸载了,有些文件夹就是删不掉,提示被占用,mmp,这时候你肯定想到了360文件粉碎机!mmp,我就删个文件夹还要装个360?谁不知道360是个“大毒瘤”!自己动手丰衣足食!正文这时候就想到了强大的shell命令,百度...
  • 0x00前言Windows XML Event Log (EVTX)单条日志清除系列文章的第三篇,介绍第一种删除当前系统evtx日志文件单条日志记录的方法:关闭服务对应的进程,释放文件句柄,解除文件占用,删除日志,重启服务0x01简介本文...
  • 它从ZIP文件中的XCI文件开始,并将其转换为文件夹。但是,在代码的末尾,我尝试让我的脚本删除它创建的一些临时文件夹。这会导致一个有点令人困惑的错误,我一直无法成功地排除故障。import ...
  • hosts文件占用问题

    千次阅读 2021-05-11 14:00:42
    修改hosts文件时一直显示被system占用,这个问题困扰了我一整天,网上所有的方法都试了包括修改权限,把文件复制出来再贴进去,用windows powershell打开修改等等,全部没用。后来我想在任务管理器中找相关的进程结束掉,...
  • 实际删除文件的时候,会有不同的提示,我们来逐一分析,逐个突破。 01 提示在XX中打开 这种解决起来最简单,它会告诉我们当前要删除的文件已经被哪个程序打开,而我们只需要关闭这个程序即可。 02 提示...
  • 修改Window的hosts文件提示“该文件被其他程序占用”解决方案
  • 1.首先打开C:\Windows\System32\drivers\etc中的hosts 2.右键属性点击安全 3.在修改后点击应用确定就可以了 如果对你有帮助,请一定要帮忙点赞好评,给予创作的动力…
  • 一、检测文件是否被进程占用的几种方式 在.NET中主要有以下方式进行检测文件是否被进程占用的几种方式: 通过直接打开文件等操作,根据是否弹出异常来判断是否被其他进程占用。 使用互操作去检测文件是否被其他进程...
  • 本实例利用java强制删除使用中的文件,demo中删除的是mdb文件,首先利用jdbc获取mdb的数据库连接,再打开mdb文件,程序照样能强制删除!类似于360强制删除文件
  • 提示该文件正在被另一进程使用XXX的问题,是因为对应的文件在一直调用 ,其生成的Image对象被Disponse()前都不会被解除锁定,这就造成了此问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等操作)。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,022
精华内容 12,808
热门标签
关键字:

修改 如何解除文件占用