Quelle est la différence entre _SH_SECURE et _SH_DENYWR

_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); }