站长论坛 - 站长交流社区- SEO交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 292|回复: 6

谁知道360的"阻止文件再生"的实现原理?

[复制链接]
发表于 2019-2-27 09:15:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
比如阻止的是C:\test.txt ,那么在C盘下就无法建立test.txt了,一但创建就被会被系统告知此文件已经被打开,又找不到是哪个模块
! G0 k1 J' I$ ~( ~' r% I加载的
回复

使用道具 举报

发表于 2019-2-27 09:41:14 | 显示全部楼层
应该是建立同名文件并加锁,这样病毒就无法复制生成了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2019-2-27 11:04:50 | 显示全部楼层
引用 1 楼 at4_rec 的回复:
应该是建立同名文件并加锁,这样病毒就无法复制生成了

$ p, W$ I) S/ \2 T0 x6 { 我查了没有同名文件
回复 支持 反对

使用道具 举报

发表于 2019-2-27 12:30:26 | 显示全部楼层
有没有文件夹,名字是test.txt,且具有系统属性和隐藏属性
回复 支持 反对

使用道具 举报

发表于 2019-2-27 12:41:37 | 显示全部楼层
ReadDirectoryChangesW
1 Q# H, S) e, U: }/ ^) Q! ?The ReadDirectoryChangesW function returns information describing the changes occurring within a directory.
6 y U4 M8 J! b
( ^1 G0 w9 @ u) a BOOL ReadDirectoryChangesW(
7 v3 v8 q# G, U1 S+ l# k3 j1 k  HANDLE hDirectory,    // handle to the directory to be watched
3 }* Z0 Y" U4 L1 {6 }   LPVOID lpBuffer,      // pointer to the buffer to receive the read 
3 x q* U- Q3 c' r9 @/ Q1 k. p( \                        // results
. m. A1 p- @5 {4 j  DWORD nBufferLength,  // length of lpBuffer
1 h2 p9 X' N6 |  BOOL bWatchSubtree,   // flag for monitoring directory or 
8 }+ f' Q; J6 T: _0 U4 d1 V; a                         // directory tree
0 s& N( c2 T5 T' [+ d9 v   DWORD dwNotifyFilter, // filter conditions to watch for
# M& A6 y: N" \, z' r# k  LPDWORD lpBytesReturned,  // number of bytes returned
( Q o; I4 X& S5 `5 ] W0 M* {  LPOVERLAPPED lpOverlapped,
# N k! _7 A: J0 G' F                        // pointer to structure needed for 
$ R; B1 C; M6 Y6 T$ g% z: y                         // overlapped I/O
y6 f/ a* o G, B- j+ u5 X3 D  LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
; f. @; i+ b) P" G0 ~                        // pointer to completion routine
: U: @. N: B+ \* W Z5 J* O );
) I) k% Z8 j/ T! S8 | 
0 B9 A1 y( q. zParameters
: |$ h+ ?! R5 f7 e' |( }* EhDirectory 
% Q, e' F r ^/ D1 THandle to the directory to be watched. This directory must be opened with the FILE_LIST_DIRECTORY access right. 
9 w0 O7 v4 J5 E$ X6 a) ]$ ? lpBuffer 
. v( O7 f. b4 M! Q1 y% R+ t% \Specifies the address of the formatted buffer in which the read results are to be returned. The structure of this buffer is defined by the FILE_NOTIFY_INFORMATION structure. This buffer is filled either synchronously or asynchronously, depending on how the directory is opened and what value is given to the lpOverlapped parameter. For more information, see the Remarks section. 
" I$ }4 }4 Y* \/ W nBufferLength 
9 O: }6 [4 K8 ?0 g/ a+ S& q6 @3 [( Y Specifies the length of the buffer pointed to by the lpBuffer parameter. 
& H, e+ D+ w' t% X4 r- S8 dbWatchSubtree 
2 |7 I8 @1 K9 p% ~$ ~Specifies whether the ReadDirectoryChangesW function will monitor the directory or the directory tree. If TRUE is specified, the function monitors the directory tree rooted at the specified directory. If FALSE is specified, the function monitors only the directory specified by the hDirectory parameter. 
) n6 u& W. ^) L dwNotifyFilter 
* i' I+ v. X. N) c$ e' t Specifies filter criteria the function checks to determine if the wait operation has completed. This parameter can be one or more of the following values: Value Meaning 
) O% P4 W, p: c8 H; J/ j' B+ m, ?& v, C; FFILE_NOTIFY_CHANGE_FILE_NAME Any filename change in the watched directory or subtree causes a change notification wait operation to return. Changes include renaming, creating, or deleting a file.  
2 u' X! u* t: c% j FILE_NOTIFY_CHANGE_DIR_NAME Any directory-name change in the watched directory or subtree causes a change notification wait operation to return. Changes include creating or deleting a directory. 
& n% A* \2 t9 _" @5 ]) X2 l FILE_NOTIFY_CHANGE_ATTRIBUTES Any attribute change in the watched directory or subtree causes a change notification wait operation to return. 
. J& w/ |& o' d7 V+ }! s$ e FILE_NOTIFY_CHANGE_SIZE Any file-size change in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change in file size only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed. 
2 A# _ |/ H c, d$ L9 z FILE_NOTIFY_CHANGE_LAST_WRITE Any change to the last write-time of files in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change to the last write-time only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed. 
" c J4 ]+ A- Y FILE_NOTIFY_CHANGE_LAST_ACCESS Any change to the last access time of files in the watched directory or subtree causes a change notification wait operation to return. 
( }6 M# R% E& T, m! o/ hFILE_NOTIFY_CHANGE_CREATION Any change to the creation time of files in the watched directory or subtree causes a change notification wait operation to return. 
" ?" X# h. q/ j C: ~FILE_NOTIFY_CHANGE_SECURITY Any security-descriptor change in the watched directory or subtree causes a change notification wait operation to return. 
8 n" h3 z4 P6 x" B: @
: E, w! w' w4 l/ j
& m9 n7 @2 I% ` lpBytesReturned 
' _; {* S% D" P& t For synchronous calls, this parameter specifies the number of bytes transferred into the lpBuffer parameter. For asynchronous calls, this parameter is undefined. You must use an asynchronous notification technique to retrieve the number of bytes transferred. 
5 f) a& F2 q1 O# @: \8 ^% A, a lpOverlapped 
( b# N2 V/ p# cPointer to an OVERLAPPED structure that supplies data to be used during asynchronous operation. Otherwise, this value is NULL. The Offset and OffsetHigh members of this structure are not used. 
0 M/ j3 a% g- S$ L. VlpCompletionRoutine 
2 L" l/ o7 h# }) JPointer to a completion routine to be called when the operation has been completed or canceled and the calling thread is in an alertable wait state. For more information about this completion routine, see FileIOCompletionRoutine. 
! ^3 ]& R% q$ _7 sReturn Values
& q% p, }$ @1 f- U' h If the function succeeds, the return value is nonzero. For synchronous calls, this means that the operation succeeded. For asynchronous calls, this indicates that the operation was successfully queued.
$ z# H& q5 h5 L w2 T h) S1 @, ?) B
) D2 ^( ] K% k ]% [& SIf the function fails, the return value is zero. To get extended error information, call GetLastError.
7 m7 b; t1 s |" l% E+ G
2 {5 q: {% e4 x7 O2 o Remarks
- h ~2 o: z' H0 N6 r, j. u2 hTo obtain a handle to a directory, use the CreateFile function with FILE_FLAG_BACKUP_SEMANTICS as follows:
j/ z# @4 N) C- q* {
, N Q% t. |6 a3 m$ D1 J( DhDir = CreateFile(
1 A/ T3 I, h2 K  DirName,                            // pointer to the file name
5 W: w$ B* k4 g/ F, t  FILE_LIST_DIRECTORY,                // access (read-write) mode
( ]; o8 u3 T. T3 s  FILE_SHARE_READ|FILE_SHARE_DELETE,  // share mode
% W$ [) W( f: l e, {- s  NULL,                               // security descriptor
6 [% P1 G" X# a+ |; G8 E9 i( q* ]2 C  OPEN_EXISTING,                      // how to create
5 M5 ?: z, [& F! Y, m6 S' N   FILE_FLAG_BACKUP_SEMANTICS,         // file attributes
# s$ w! W5 o* z   NULL                                // file with attributes to copy
/ j" h* F/ f. P# |);
: E$ h$ t1 }& H- I; i  
; r* ]! K; n" {: ~0 O* @A call to ReadDirectoryChangesW can be completed synchronously or asynchronously. To specify asynchronous completion, open the directory with CreateFile as shown above, but additionally specify the FILE_FLAG_OVERLAPPED attribute in the dwFlagsAndAttributes parameter. Then specify an OVERLAPPED structure when you call ReadDirectoryChangesW. 
- G( a" `8 W# ~% t9 v7 {
! N& ~9 V! T% \. h/ G- e Upon successful synchronous completion, the lpBuffer parameter is a formatted buffer and the number of bytes written to the buffer is available in lpBytesReturned. If the number of bytes transferred is zero, the buffer was too small to provide detailed information on all the changes that occurred in the directory or subtree. In this case, you should compute the changes by enumerating the directory or subtree.
" p7 ]' m" m# G& \0 V
' _' _5 e% O* w; x8 q# |For asynchronous completion, you can receive notification in one of three ways: 
+ _/ V% \# u/ W# _" R$ f) K
p) |$ w7 D3 Z Using the GetOverlappedResult function. To receive notification through GetOverlappedResult, do not specify a completion routine in the lpCompletionRoutine parameter. Be sure to set the hEvent member of the OVERLAPPED structure to a unique event. 
4 D: O: F* R$ L0 X1 M" X! WUsing the GetQueuedCompletionStatus function. To receive notification through GetQueuedCompletionStatus, do not specify a completion routine in lpCompletionRoutine. Associate the directory handle hDirectory with a completion port by calling the CreateIoCompletionPort function. 
$ I# K r a. I& R V' m& ~2 k5 aUsing a completion routine. To receive notification through a completion routine, do not associate the directory with a completion port. Specify a completion routine in lpCompletionRoutine. This routine is called whenever the operation has been completed or canceled while the thread is in an alertable wait state. The hEvent member of the OVERLAPPED structure is not used by the system, so you can use it yourself. 
" B; T, T& d' H* } ?4 ^ QuickInfo
- s7 H" N$ Q' M8 L9 `  Windows NT: Requires version 4.0 or later.
3 z3 A0 a, z( P" a3 B; W! F   Windows: Unsupported.
% H; n) V8 y; h% o& Y& [   Windows CE: Unsupported.
, L; y4 x y: \* p2 Z- T- W7 d8 i* w  Header: Declared in winbase.h.
& E4 @( T7 v; U q/ s/ d. I0 k$ i   Import Library: Use kernel32.lib.
* N; z/ e8 _/ [9 @& J4 c7 }$ S
; C9 a8 x- ~$ \% \ See Also
- ?8 j- Y) Y4 H9 o0 q! r- f7 _File I/O Overview, File Functions, CreateFile, CreateIoCompletionPort, FILE_NOTIFY_INFORMATION, FileIOCompletionRoutine, GetOverlappedResult, GetQueuedCompletionStatus, OVERLAPPED 
) ^) V8 Y, s5 o: p
! M1 Y: A5 f4 b, k: F  
回复 支持 反对

使用道具 举报

发表于 2019-2-27 13:08:30 | 显示全部楼层
引用 3 楼 Rocloud 的回复:
有没有文件夹,名字是test.txt,且具有系统属性和隐藏属性

3 T" S, A T) u; _当然没有
回复 支持 反对

使用道具 举报

发表于 2019-2-27 13:15:09 | 显示全部楼层
被360打开的吧,个人认为是360内部创建一个空进程占用这个文件夹
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易采站长站 ( 蒙ICP备14002389-1号 ) |

GMT+8, 2019-12-16 08:02

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表