判断文件是否PE文件,是否GUI程序

BOOL IsWindowsApp( CString strPathName )
 {
     if ( ! PathFileExists( strPathName ) )
         return FALSE;
 
     // 根据 PE 签名判断当前文件是否合法的 PE 文件
     HANDLE hFile = CreateFile( strPathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
     if ( hFile == INVALID_HANDLE_VALUE ) {
         TRACE1( "Failed To Open File %s !\n", strPathName );
         return FALSE;
     }
 
     HANDLE hMMFile = CreateFileMapping( hFile, NULL, PAGE_READONLY, 0, 0, NULL );
     if ( hMMFile == INVALID_HANDLE_VALUE ) {
         CloseHandle( hFile );
         return FALSE;
     }
 
     LPVOID pvMem = MapViewOfFile( hMMFile, FILE_MAP_READ, 0, 0, 0 );
     if ( ! pvMem ) {
         CloseHandle( hMMFile );
         CloseHandle( hFile );
         return FALSE;
     }
 
     // 是否包含有 DOS 签名
     if ( *( USHORT* ) pvMem != IMAGE_DOS_SIGNATURE ) {
         UnmapViewOfFile( pvMem );
         CloseHandle( hMMFile );
         CloseHandle( hFile );
         return FALSE;
     }
 
     // 是否包含有 NT 签名
     if ( *( ( DWORD* ) ( ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew ) ) != IMAGE_NT_SIGNATURE ) {
         UnmapViewOfFile( pvMem );
         CloseHandle( hMMFile );
         CloseHandle( hFile );
         return FALSE;
     }
 
     LPVOID pvOptionalHeader =  ( PBYTE ) pvMem + ( ( PIMAGE_DOS_HEADER ) pvMem )->e_lfanew + sizeof( DWORD ) + sizeof( IMAGE_FILE_HEADER );
 
     IMAGE_OPTIONAL_HEADER ioh;
     CopyMemory( & ioh, pvOptionalHeader, sizeof( IMAGE_OPTIONAL_HEADER ) );
 
     if ( ioh.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI ) {
         UnmapViewOfFile( pvMem );
         CloseHandle( hMMFile );
         CloseHandle( hFile );   
 
         return TRUE;
     }
 
     return FALSE;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ABAP 中,可以使用函数模块 GUI_GET_FILE_ATTRIBUTES 来获取文件的属性信息,包括文件类型、是否为目录等。以下是一个示例代码段,演示如何判断文件是否文件夹: DATA: lv_filename TYPE string VALUE '/tmp/myfolder', lt_attributes TYPE STANDARD TABLE OF file_attr, ls_attr TYPE file_attr. CALL FUNCTION 'GUI_GET_FILE_ATTRIBUTES' EXPORTING file_name = lv_filename TABLES file_attributes = lt_attributes EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 header_not_allowed = 8 separator_not_allowed = 9 filesize_not_allowed = 10 header_too_long = 11 dp_error_create = 12 dp_error_send = 13 dp_error_write = 14 unknown_dp_error = 15 access_denied = 16 dp_out_of_memory = 17 disk_full = 18 dp_timeout = 19 file_not_found = 20 dataprovider_exception = 21 control_flush_error = 22. IF sy-subrc EQ 0 AND lt_attributes IS NOT INITIAL. READ TABLE lt_attributes INTO ls_attr INDEX 1. IF ls_attr-is_dir EQ abap_true. WRITE: / 'The file is a directory.'. ELSE. WRITE: / 'The file is not a directory.'. ENDIF. ELSE. WRITE: / 'An error occurred while getting file attributes.'. ENDIF. 在上面的示例中,文件名被存储在变量 lv_filename 中,函数 GUI_GET_FILE_ATTRIBUTES 被调用来获取文件属性信息。如果文件属性表(lt_attributes)不为空,则第一个条目(索引为 1)被读取到 ls_attr 中。最后,根据属性 is_dir 的值来判断文件是否文件夹。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值