_SH_DENYWR refuse toute autre tentative d’ouverture d’un fichier avec des droits en écriture (violation de partage) _SH_SECURE Définit le mode sécurisé (lecture partagée, access en écriture exclusif)
Le _SH_SECURE semble être plus récent, en raison du fait que les documents semblent le masquer ou l’omettre en fonction de votre apparence. Il n’y a presque aucune information sur le net que j’ai pu y trouver.
Comment sont-ils différents?
Le comportement de _SH_SECURE
dépend de l’access demandé dans l’argument mode
à _fsopen()
/ _wfsopen()
. Si seul un access en lecture est demandé, _SH_SECURE
correspond à FILE_SHARE_READ
. Sinon, il mappe à 0
(access exclusif).
Contraste _SH_DENYWR
, qui correspond toujours à FILE_SHARE_READ
.
La partie pertinente du code source CRT (lignes 269-301 de open.c
dans Visual Studio 2010) est la suivante:
/* * decode sharing flags */ switch ( shflag ) { case _SH_DENYRW: /* exclusive access */ fileshare = 0L; break; case _SH_DENYWR: /* share read access */ fileshare = FILE_SHARE_READ; break; case _SH_DENYRD: /* share write access */ fileshare = FILE_SHARE_WRITE; break; case _SH_DENYNO: /* share read and write access */ fileshare = FILE_SHARE_READ | FILE_SHARE_WRITE; break; case _SH_SECURE: /* share read access only if read-only */ if (fileaccess == GENERIC_READ) fileshare = FILE_SHARE_READ; else fileshare = 0L; break; default: /* error, bad shflag */ _doserrno = 0L; /* not an OS error */ *pfh = -1; _VALIDATE_RETURN_ERRCODE(( "Invalid sharing flag" , 0 ), EINVAL); }