Technote 1186

How To Be a Good Multiple Users Citizen


ñ⁄éü

ǪÇÃÉtÉHÉãÉ_ÇÕǫDZDždžÇÈ

Ç∑Ç◊ǃÇÃÉÜÅ[ÉUÇ™ìØÇ∂Ç≈džÇÈÇΔÇÕǩǨÇÁǻǢ

Ç∑Ç◊ǃÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ìØÇ∂Ç≈džÇÈÇΔÇÕǩǨÇÁǻǢ

É}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈǩǫǧǩÇÃéØï 

É}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™ÉAÉNÉeÉBÉuÇ≈džÇÈǩǫǧǩÇÃéØï 

ÉçÉOÉCÉìÇ≥ÇÍǃǢÇÈÉÜÅ[ÉUèÓïÒ

ÉÜÅ[ÉUñºÇΔÉpÉXÉèÅ[Éh

ǪÇÃëºÇÃíçà”éñçÄÇΔÉRÉÅÉìÉg

óvñÒ

DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAMac OS 9.0 Ç≈ì±ì¸Ç≥ÇÍÇΩÉ}ÉãÉ`ÉÜÅ[ÉUã@î\Ç…ÇÊǡǃíÒãüÇ≥ÇÍÇÈêVǵǢ API DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBÇ‹ÇΩÅAÉ}ÉãÉ`ÉÜÅ[ÉUã@î\Ç…ä÷òAǵǃÉfÉxÉçÉbÉpÇ©ÇÁïpî…Ç…äÒÇπÇÁÇÍÇÈéøñ‚Ç÷ÇÃâÒìöÇé¶ÇµÅAÇÊÇ≠î≠ê∂Ç∑ÇÈñ‚ëËÇ…ëŒÇ∑ÇÈÇ¢Ç≠ǬǩÇÃâÒîï˚ñ@LJé¶ÇµÇ‹Ç∑ÅB

DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÕÅAÉVÉXÉeÉÄÉtÉHÉãÉ_ì‡ÇÃÉtÉHÉãÉ_Ç…ÉAÉNÉZÉXǵÇΩÇË FindFolder API ÇégópǵǃǢǃÅAǵǩLJëŒè€ÇΔÇ»ÇÈÉtÉHÉãÉ_Ç÷ÇÃÉAÉNÉZÉXå†Ç…ì¡Ç…íçà”Çï•ǧïKóvÇÃdžÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇëŒè€Ç…èëÇ©ÇÍǃǢNjÇ∑ÅB


ǪÇÃÉtÉHÉãÉ_ÇÕǫDZDždžÇÈ


FindFolder ÉãÅ[É`ÉìÇégópÇ∑ÇÈÇΔÅAåƒÇ—èoǵå≥ÇÕì¡éÍÇ»ñ⁄ìIÇéùǬÉtÉHÉãÉ_ÇÃèÍèäÇåàíËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÇΩÇΔǶnjÅAFindFolder ÇÕÅuèâä˙ê›íËÅvÉtÉHÉãÉ_ÅiÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™é©ï™é©êgÇÃèâä˙ê›íËÉtÉ@ÉCÉãÇäiî[Ç∑ÇÈÇΩÇflÇ…ç≈ìKÇ»èÍèäÅjÇå©Ç¬ÇØèoÇ∑ÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBǩǬǃ FindFolder ÇÃéÂÇ»å¯ópÇÕÅAàŸÇ»ÇÈåæåÍÉVÉXÉeÉÄÇ™égópÇ≥ÇÍǃǢÇÈÇΔÇ´Ç≈LJÅiDZÇÃÇÊǧǻèÍçáÅAÉtÉHÉãÉ_ñºÇÕǵnjǵnjàŸÇ»ÇÈï\ãLÇΔÇ»ÇÈèÍçáǙdžÇËÇ‹Ç∑ÅjÅAèÌÇ…ìKêÿÇ»ÉtÉHÉãÉ_ÇåüèoÇ≈Ç´ÇÈÇΔǢǧDZÇΔÇ≈ǵÇΩÅBǵǩǵÉ}ÉãÉ`ÉÜÅ[ÉUã@î\ÇÃìoèÍÇ…î∫Ç¢ÅAégópíÜÇÃåæåÍÇ…âûÇ∂ÇΩÇ≥NjǥNjǻñºëOÇéùǬÉtÉHÉãÉ_Ç™ FindFolder Ç©ÇÁï‘Ç≥ÇÍÇÈÇæÇØÇ≈Ç»Ç≠ÅAǪÇÍÇÁÇÃï€ë∂èÍèäÇ™ä˙ë“Ç∑ÇÈà íuÇΔàŸÇ»Ç¡ÇƒÇ¢ÇƒÇ‡Ç©Ç‹ÇÌÇ»Ç≠Ç»ÇËNjǵÇΩÅB

ç°å„ÇÕÅADZÇÍÇ‹Ç≈ÇΔÇÕï ÇÃóùóRÇ≈ FindFolder ÇégópÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBǬNjÇËÅAåüèoǵÇÊǧÇΔÇ∑ÇÈÉtÉHÉãÉ_Ç™ïKÇ∏ǵLJä˙ë“Ç∑ÇÈèÍèäÇ…ë∂ç›ÇµÇ»Ç≠ǃLJ FindFolder ÇégópÇ≈Ç´ÇÈÇÊǧDžǻÇÈÇΔǢǧDZÇΔÇ≈Ç∑ÅB

É}ÉãÉ`ÉÜÅ[ÉUã@î\Ç≈ÇÕÅAÉçÉOÉCÉìÇ∑ÇÈâ¬î\ê´ÇÃdžÇÈǪÇÍǺÇÍÇÃÉÜÅ[ÉUÇ…ä÷òAÇ√ÇØÇÁÇÍÇΩÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_ÇÃÉOÉãÅ[ÉvÇä«óùǵNjÇ∑ÅBÉRÉìÉsÉÖÅ[É^ÇÃèäóLé“Ç™ÉçÉOÉCÉìǵǃǢÇÈèÍçáÅAÉäÉ_ÉCÉåÉNÉgÇÕçsÇÌÇÍÇ∏ÅAdžÇΩǩLJÉ}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™ë∂ç›ÇµÇ»Ç¢Ç©ÇÃÇÊǧDžÅAÇ∑Ç◊ǃÇÃÉtÉHÉãÉ_Ç÷ÇÃÉAÉNÉZÉXÇ™â¬î\Ç…Ç»ÇËÇ‹Ç∑ÅBǵǩǵÅAǪÇÃëºÇÃÉÜÅ[ÉUÇ™ÉçÉOÉCÉìǵǃǢÇÈèÍçáÅAéüÇÃíËêîÇégǡǃ FindFolder API Ç≈ÉAÉNÉZÉXÇ≈Ç´ÇÈÇÃÇÕÅAǪÇÍÇÁÇÃÉÜÅ[ÉUÇÃÉäÉ_ÉCÉåÉNÉgÅiÉÜÅ[ÉUÇ≤ÇΔÇ…äÑÇËìñǃÇÁÇÍǃǢÇÈÅjÉtÉHÉãÉ_ÇÃÇ›Ç≈Ç∑ÅB

  • kDesktopFolderType,
  • kTrashFolderType,
  • kPrintMonitorDocsFolderType,
  • kStartupFolderType,
  • kAppleMenuFolderType,
  • kPreferencesFolderType,
  • kLauncherItemsFolderType,
  • kShutdownItemsFolderType,
  • kStartupItemsDisabledFolderType,
  • kShutdownItemsDisabledFolderType,
  • kInternetSearchSitesFolder,
  • kControlStripModulesFolder,
  • kDesktopPicturesFolderType,
  • kFavoritesFolderType,
  • kALMLocationsFolderType,
  • kSpeakableItemsFolderType,
  • kKeychainFolderType,

íçà”ÅF
ÉäÉÇÅ[ÉgÉAÉNÉZÉXÇÃèÍçáÅiǬNjÇË Macintosh Manager ÇóòópÇ∑ÇÈèÍçáÅjÉfÉXÉNÉgÉbÉvÉtÉHÉãÉ_ÅikDesktopFolderTypeÅjÇΔÉvÉäÉìÉgÉÇÉjÉ^ÉtÉHÉãÉ_ÅikPrintMonitorDocsFolderTypeÅjÇÕÉäÉ_ÉCÉåÉNÉgÇ≥ÇÍÇ‹ÇπÇÒÅB


îÒÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_Ç…ÉAÉNÉZÉXÇ∑ÇÈïKóvǙdžÇÈèÍçáÇÕÅiǪÇÍÇÁÇ∑Ç◊ǃDžÉAÉNÉZÉXÇ≈Ç´ÇÈÇΔÇÕǩǨÇËÇ‹ÇπÇÒÇ™ÅjÅAéüÇÃíËêîÇégópǵNjÇ∑ÅB

  • kSystemDesktopFolderType
  • kSystemTrashFolderType
  • kSystemPreferencesFolderType

Ç≥ÇÁÇ…ÅAÉÜÅ[ÉUÇÃÉtÉHÉãÉ_ÇåüèoÇ∑ÇÈÇΩÇflÇ…êVǵǢíËêîÇ™íËã`Ç≥ÇÍǃǢNjÇ∑ÅB

  • kUsersFolderType: ÅuÉÜÅ[ÉUÅvÉtÉHÉãÉ_ÇΔÇÕÅAǪÇÍǺÇÍÇÃÉÜÅ[ÉUÇ…äÑÇËìñǃÇÁÇÍǃǢÇÈ 1 ǬÇÃÉtÉHÉãÉ_
  • kCurrentUserFolderType: åªç›ÉçÉOÉIÉìǵǃǢÇÈÉÜÅ[ÉUÇ…äÑÇËìñǃÇÁÇÍǃǢÇÈÉtÉHÉãÉ_
  • kCurrentUserRemoteFolderLocation: åªç›ÉçÉOÉIÉìǵǃǢÇÈÉÜÅ[ÉUÇ…äÑÇËìñǃÇÁÇÍǃǢÇÈÉäÉÇÅ[ÉgÉtÉHÉãÉ_
  • kCurrentUserRemoteFolderType: åªç›ÉçÉOÉIÉìǵǃǢÇÈÉÜÅ[ÉUÇ…äÑÇËìñǃÇÁÇÍǃǢÇÈÉäÉÇÅ[ÉgÉtÉHÉãÉ_ÇÃà íu
  • kSharedUserDataFolderType: ã§óLÅuèëófiÅvÉtÉHÉãÉ_ÇΔÇÕÅAÇ∑Ç◊ǃÇÃÉÜÅ[ÉUÇ™ì«Ç›èëÇ´â¬î\Ç»ÉtÉHÉãÉ_
  • kVolumeSettingsFolderType: É{ÉäÉÖÅ[ÉÄå≈óLÇÃÉÜÅ[ÉUèÓïÒÇ™äiî[Ç≥ÇÍÇÈíËêî

écîOǻǙÇÁÅADZÇÍÇÁÇÃì¡éÍÉtÉHÉãÉ_ÇÃà íuÇÕDZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃñ{ëËÇ≈ÇÕǻǢÇΩÇflÅAè⁄ç◊Ç»ê‡ñæÇÕï ÇÃã@âÔÇ…è˜Ç¡ÇƒêÊÇ…êiÇfiDZÇΔDžǵNjÇ∑ÅB



êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

Ç∑Ç◊ǃÇÃÉÜÅ[ÉUÇ™ìØÇ∂Ç≈džÇÈÇΔÇÕǩǨÇÁǻǢ

ÉuÅ[ÉgÉvÉçÉZÉXÇ™äÆóπÇ∑ÇÈÇΔÅAÉ}ÉãÉ`ÉÜÅ[ÉUÇÕÉçÉOÉCÉìÉ_ÉCÉAÉçÉOÇï\é¶ÇµÇ‹Ç∑ÅBÉçÉOÉCÉìÇ∑ÇÈÉÜÅ[ÉUÇÕÉAÉJÉEÉìÉgÅií èÌÇÕÉRÉìÉsÉÖÅ[É^ÇÃèäóLé“Ç…ÇÊǡǃÉZÉbÉgÉAÉbÉvÇ≥ÇÍǃǢÇÈÅjÇéùÇ¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÇ‹ÇΩÅAÉçÉOÉCÉìÇÃÇΩÇflÇÃÉpÉXÉèÅ[ÉhÇì¸óÕÇµÇ»ÇØÇÍnjǻÇÁǻǢDZÇΔLJdžÇËÇ‹Ç∑ÅBÉçÉOÉCÉìÉ_ÉCÉAÉçÉOÇ™ï\é¶Ç≥ÇÍǃǢÇÈä‘ÅAé¿çsÇãñâ¬Ç≥ÇÍÇÈÇÃÇÕÉoÉbÉNÉOÉâÉEÉìÉhÉIÉìÉäÅ[ÉAÉvÉäÉPÅ[ÉVÉáÉìÅiǬNjÇËÅAÉ^ÉCÉvÇ™ 'appe' ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÅAÇ‹ÇΩÇÕ SIZE ÉäÉ\Å[ÉXÇà background-only ÉrÉbÉgÇ™ÉZÉbÉgÇ≥ÇÍǃǢÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÅjÇæÇØÇ≈ÅAí èÌÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃé¿çsÇÕãñâ¬Ç≥ÇÍÇ‹ÇπÇÒÅB

çÏãΔÇèIóπǵÇΩÇΔÇ´ÅAÉÜÅ[ÉUÇÕÅuì¡ï ÅvÉÅÉjÉÖÅ[Ç©ÇÁÅuÉçÉOÉAÉEÉgÅvÇëIëǵNjÇ∑ÅBDZÇÍÇ…ÇÊÇËÅAÉçÉOÉAÉEÉgÉvÉçÉZÉXÇ™äJénÇ≥ÇÍÇ‹Ç∑ÅBÇ‹Ç∏ÅAÇ∑Ç◊ǃÇÃí èÌÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™èIóπÇ∑ÇÈÇ‹Ç≈ÅAǪÇÍÇÁÇ…ÅgèIóπÅhApple ÉCÉxÉìÉgÇ™ëóêMÇ≥ÇÍÇ‹Ç∑ÅiǻǮÅAÉÜÅ[ÉUÇ™àÍìxÉçÉOÉAÉEÉgÇämîFÇ∑ÇÈÇΔÅAǪÇÍà»ç~ÅAÉçÉOÉAÉEÉgÇíÜé~Ç∑ÇÈDZÇΔÇÕÇ≈Ç´Ç»Ç≠Ç»ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™é¿ç€Ç…èIóπÇ∑ÇÈÇ‹Ç≈ÅAêîïbÇ≤ÇΔÇ… quit ÉCÉxÉìÉgÇ™ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ëóêMÇ≥ÇÍÇ‹Ç∑ÅjÅBéüÇ…ÅAÉçÉOÉAÉEÉgÇÃí ímÇ™ìoò^Ç≥ÇÍǃǢÇÈÇ∑Ç◊ǃÇÃÉvÉçÉOÉâÉÄÇ…ëóêMÇ≥ÇÍÇ‹Ç∑ÅBç≈å„Ç…ÅAFolder Manager Ç™ÉÜÅ[ÉUÇ≤ÇΔÇ…äÑÇËìñǃÇÁÇÍǃǢÇÈÉtÉHÉãÉ_Ç÷ÇÃÉäÉ_ÉCÉåÉNÉgÇíÜé~Ç∑ÇÈÇÊǧDžéwé¶ÇµÇ‹Ç∑ÅBDZÇÃÇÊǧǻÉvÉçÉZÉXÇåoǃÉçÉOÉAÉEÉgÇ™äÆóπÇ∑ÇÈÇΔÅAçƒìxÉçÉOÉCÉìÉ_ÉCÉAÉçÉOÇ™ï\é¶Ç≥ÇÍÇ‹Ç∑ÅB

íçà”ÅF
ÉÜÅ[ÉUÇ™Åuì¡ï ÅvÉÅÉjÉÖÅ[Ç©ÇÁÅuçƒãNìÆÅvÇ‹ÇΩÇÕÅuÉVÉXÉeÉÄèIóπÅvÇëIëǵÇΩèÍçáLJÅAìØólÇÃï˚ñ@Ç≈ÉçÉOÉAÉEÉgÇÃí ímÇ™ëóêMÇ≥ÇÍÇ‹Ç∑ÅB


í èÌÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕ 2 éÌófiÇÃàŸÇ»ÇÈÉfÅ[É^ÇèëÇ´çûÇfiïKóvǙdžÇËÇ‹Ç∑ÅBǬNjÇËÅAèëófiÇ‚ÉÜÅ[ÉUÇÃèâä˙ê›íËǻǫÇÃÉÜÅ[ÉUÉfÅ[É^ÇΔÅAÉnÅ[ÉhÉEÉFÉAÇÃç\ê¨èÓïÒÇ‚é´èëǻǫÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÅ[É^Ç≈Ç∑ÅBëOé“ÇÕí èÌÅAÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_ÇÃÇ¢Ç∏ÇÍǩDžäiî[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑Ç™ÅAå„é“ÇÕîÒÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_Ç…äiî[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBñ‚ëËÇÕÅAàÍïîÇÃä¬ã´ÅiÅuLimitedÅvÇ‚ÅuPanelsÅvÅjÇ™ 1 ǬÇÃÉtÉHÉãÉ_ÅikApplicationSupportFolderType íËêîÇâÓǵǃåüèoÇ≈Ç´ÇÈÅuÉAÉvÉäÉPÅ[ÉVÉáÉìÉTÉ|Å[ÉgÅvÉtÉHÉãÉ_ÅjÇèúÇ≠Ç∑Ç◊ǃÇÃîÒÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_Ç÷ÇÃèëÇ´çûÇ›ÉAÉNÉZÉXÇã÷é~Ç∑ÇÈÇΔǢǧDZÇΔÇ™å¥àˆÇ≈î≠ê∂ǵNjÇ∑ÅB

DZÇÃÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™åªç›ÇªÇÃëºÇÃÉtÉHÉãÉ_Ç÷ÇÃÉfÅ[É^èëÇ´çûÇ›ÇçsǡǃǢÇÈèÍçáÇÕÅAÉ}ÉãÉ`ÉÜÅ[ÉUã@î\ÇΔÇÃå›ä∑ê´Çà€éùÇ∑ÇÈÇΩÇflDžǪÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ïœçXÇâ¡Ç¶ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBì¡Ç…ÅANetboot ÇÃèÍçáLJǪǧÇ≈džÇÈÇÊǧDžÅAǪÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉtÉHÉãÉ_Ç™èëÇ´çûÇ›â¬î\Ç≈džÇÈǩǫǧǩÇämîFÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹ÇπÇÒÅB

ì¡íËÇÃÉtÉHÉãÉ_Ç÷ÇÃèëÇ´çûÇ›ÉAÉNÉZÉXå†ÇéùǬǩǫǧǩÇîªífÇ∑ÇÈÇΩÇflÇ…ÇÕÅAPBGetCatInfo ÇåƒÇ—èoǵǃÅACInfoPBRec ç\ë¢ëÃÇà ioACUser ÉtÉBÅ[ÉãÉhÇÉ`ÉFÉbÉNǵNjÇ∑ÅBÇΩÇæÇµÅADZÇÃãKë•Ç…ÇÕ 1 ǬÇÃó·äOǙdžÇËÇ‹Ç∑ÅB
ÅuÉAÉvÉäÉPÅ[ÉVÉáÉìÉTÉ|Å[ÉgÅvÉtÉHÉãÉ_ÇΔǪÇÃÉTÉuÉtÉHÉãÉ_Ç…ëŒÇµÇƒÇ†ÇÈíˆìxÇÃêÖèÄÇÃÉZÉLÉÖÉäÉeÉBÇíÒãüǵÅAFinderÅAPanelsÅAStandard File PackageÅAÇ®ÇÊÇ— Navigation Services Ç…ÇÊÇÈÅuÉAÉvÉäÉPÅ[ÉVÉáÉìÉTÉ|Å[ÉgÅvÉtÉHÉãÉ_Ç÷ÇÃèëÇ´çûÇ›Çñhé~Ç∑ÇÈÇΩÇflÅiǪÇÍÇÁÇÃÉvÉçÉZÉXÇÕDZÇÃDZÇΔÇÉ`ÉFÉbÉNǵNjÇ∑ÅjÅAPBGetCatInfo ÇÕèÌDžǪÇÍÇÁÇÃÉtÉHÉãÉ_Ç÷ÇÃèëÇ´çûÇ›ÉAÉNÉZÉXå†Ç™Ç»Ç¢ÇΔǢǧèÓïÒÇï‘ǵNjÇ∑ÅBǵǩǵé¿ç€è„ÅADZÇÃDZÇΔÇÕǪÇÍÇÁÇÃÉtÉHÉãÉ_ÇæÇØÇ…äYìñǵÅAåªç›ÇÃëÂïîï™ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÇÌÇ¥ÇÌÇ¥ç≈èâÇ…ÉAÉNÉZÉXå†ÇÉ`ÉFÉbÉNÇ∑ÇÈÇÊǧǻDZÇΔÇÕǵǻǢÇΩÇflÅAÇΔÇ…Ç©Ç≠DZÇÍÇÁÇÃÉtÉHÉãÉ_Ç…èëÇ´çûÇ›ÇçsǧDZÇΔÇÕâ¬î\Ç≈Ç∑ÅBåæÇ¢ä∑ǶÇÍÇŒÅADZÇÍÇÕÅAÅuÉAÉvÉäÉPÅ[ÉVÉáÉìÉTÉ|Å[ÉgÅvÉtÉHÉãÉ_ÇΔǪÇÃÉTÉuÉtÉHÉãÉ_ÇèúÇ≠ÉtÉHÉãÉ_Ç÷ÇÃèëÇ´çûÇ›ÉAÉNÉZÉXå†ÇèÌÇ…É`ÉFÉbÉNÇµÇ»ÇØÇÍnjǻÇÁǻǢÇΔǢǧDZÇΔÇà”ñ°ÇµÇ‹Ç∑ÅB

Ç‡ÇøÇÎÇÒÅAÉtÉHÉãÉ_Ç÷ÇÃèëÇ´çûǛǙÇ≈Ç´ÇÈǩǫǧǩÇdžÇÁÇ©Ç∂ÇflÉ`ÉFÉbÉNǵǻÇ≠ǃLJǩNjǢNjÇπÇÒÇ™ÅAîCà”ÇÃÉtÉHÉãÉ_ÇΔÇÃä‘Ç≈ì«Ç›èëÇ´ÇééÇ›ÇÈÇΔÇ´Ç…ÇÕÅAafpAccessDeniedÅi-5000ÅjÉGÉâÅ[ÇìKêÿÇ…èàóùÇ∑ÇÈèÄîıÇ™Ç≈Ç´ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

Ç‹ÇΩÅAFindFolder Ç…ÇÊǡǃï‘Ç≥ÇÍÇÈ foundVRefNum ílDžLJíçà”Çï•ǧïKóvǙdžÇËÇ‹Ç∑ÅBÇΔǢǧÇÃLJÅADZÇÃílÇÕÉfÉxÉçÉbÉpÇ™ìnǵÇΩ vRefNum ílÇΔìØàÍÇ≈ǻǢèÍçáǙdžÇÈÇΩÇflÇ≈Ç∑ÅBàÍïîÇÃÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_ÇÕï ÇÃÉ{ÉäÉÖÅ[ÉÄè„Ç…ë∂ç›Ç∑ÇÈDZÇΔǙdžÇËÅAèÍçáÇ…ÇÊǡǃÇÕÉäÉÇÅ[ÉgÉ{ÉäÉÖÅ[ÉÄè„Ç…ë∂ç›Ç∑ÇÈDZÇΔLJdžÇËÇ‹Ç∑ÅBDZÇÃÇΩÇflÅAFindFolder Ç©ÇÁï‘Ç≥ÇÍÇΩ foundVRefNum Ç®ÇÊÇ— foundDirID ílÇÃóºï˚ÇèÌÇ…égópǵǃÇ≠ÇæÇ≥Ç¢ÅB



êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

Ç∑Ç◊ǃÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ìØÇ∂Ç≈džÇÈÇΔÇÕǩǨÇÁǻǢ

ÉNÉâÉVÉbÉNÇ» Macintosh ÉAÉvÉäÉPÅ[ÉVÉáÉìÇèëǢǃǢÇÈèÍçáÇÕÅAFindFolder ÇégǡǃïKóvÇ»ÉtÉHÉãÉ_ÇåüèoÇ∑ÇÈDZÇΔÇΔÇÕï Ç…ÅAÇ≥ÇÁDžǪÇÍÇÁÇÃÉtÉHÉãÉ_Ç÷ÇÃèëÇ´çûÇ›ÉAÉNÉZÉXå†ÇÉ`ÉFÉbÉNǵNjÇ∑ÅBDZDZNjÇ≈ÇÕí èÌí ÇËÇÃçÏãΔÇ≈Ç∑ÅBÉ}ÉãÉ`ÉÜÅ[ÉUã@î\ÇÕÉtÉHÉãÉ_ÇÉäÉ_ÉCÉåÉNÉgǵÅADZÇÃèàóùÇÕǩǻÇËìßâflìIÇ…é¿çsÇ≥ÇÍÇ‹Ç∑ÅBDZÇÍÇÁÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕåàǵǃÉçÉOÉCÉìÇÅuå©ÇÈÅvDZÇΔÇÕÇ»Ç≠ÅAÉçÉOÉAÉEÉgÇ™çsÇÌÇÍÇÈÇΩÇ—Ç… 'quit' AppleEvent ÇéÛêMǵNjÇ∑ÅB

ǵǩǵÅAÉoÉbÉNÉOÉâÉEÉìÉhÉAÉvÉäÉPÅ[ÉVÉáÉìÅiÉ^ÉCÉv 'appe'ÅjÇ‚ÅAǪÇÃëºÇÃèIóπǵǻǢÉvÉçÉZÉXÇèëǢǃǢÇÈèÍçáÇÕÅAÉçÉOÉCÉì/ÉçÉOÉAÉEÉgǙǢǬçsÇÌÇÍÇÈÇ©Çê≥ǵÇ≠îFéØÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB

à»â∫Ç…é¶Ç∑ API ÇÕÇ∑Ç◊ǃ Folders.h Ç…ä‹Ç‹ÇÍǃǢNjÇ∑ÅB

éüÇÃí ímÇìoò^Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

kFolderManagerNotificationMessageUserLogIn

ÉÜÅ[ÉUÇ™ÉçÉOÉCÉìǵÇΩÇΔÇ´Ç…ëóêMÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉÅÉbÉZÅ[ÉWÇ™éÛêMÇ≥ÇÍÇÈÇΔÅAFindFolder () ÇÕÉÜÅ[ÉUÇ™ÉçÉOÉAÉEÉgÇ∑ÇÈÇ‹Ç≈ÉÜÅ[ÉUÇÃÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_Çà vRefNum ÇΔ dirID Çï‘ǵNjÇ∑ÅiëOèqÇÃÉäÉ_ÉCÉåÉNÉgÉtÉHÉãÉ_ÇÃÉäÉXÉgÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅjÅBDZÇÃÉÅÉbÉZÅ[ÉWÇÕÅAêVǵǢÉÜÅ[ÉUÇÃèâä˙ê›íËÇÉçÅ[ÉhÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB

kFolderManagerNotificationMessagePreUserLogIn

FindFolder () ÇÉÜÅ[ÉUÇÃÉtÉHÉãÉ_Ç…ÉäÉ_ÉCÉåÉNÉgÇ∑ÇÈíºëOÇ…ëóêMÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃí ímÇéÛêMǵÇΩÇΔÇ´Ç… FindFolder () ÇåƒÇ—èoÇ∑ÇΔÅAÉVÉXÉeÉÄÉtÉHÉãÉ_Çà vRefNum ÇΔ dirID Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅBDZÇÃÉÅÉbÉZÅ[ÉWÇÕÅAFindFolder () Ç™ÉäÉ_ÉCÉåÉNÉgÇ≥ÇÍÇÈëOÇ…èäóLé“ÇÃèâä˙ê›íËÇçXêVÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB

kFolderManagerNotificationMessageUserLogOut

ÉÜÅ[ÉUÇ™ÉçÉOÉAÉEÉgǵÇΩÇΔÇ´Ç…ëóêMÇ≥ÇÍÇ‹Ç∑ÅBDZÇÍÇÕÅAFindFolder () Ç™ÉÜÅ[ÉUÇÃÉtÉHÉãÉ_Çï‘Ç∑ç≈å„ÇÃÉ`ÉÉÉìÉXÇ≈Ç∑ÅBDZÇÃí ímà»ç~ÅAFindFolder () ÇÕÉVÉXÉeÉÄÉtÉHÉãÉ_Çà vRefNum ÇΔ dirID Çï‘Ç∑DZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBDZÇÃÉÅÉbÉZÅ[ÉWÇÕÅAÉçÉOÉAÉEÉgÇçsǧä‘Ç…ÉÜÅ[ÉUÇÃèâä˙ê›íËÉtÉ@ÉCÉãÇçXêVÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB

kFolderManagerNotificationMessagePostUserLogOut

FindFolder () Ç™ÉVÉXÉeÉÄÉtÉHÉãÉ_Çà vRefNum ÇΔ dirID Çï‘Ç∑ÇÊǧDžǻǡÇΩíºå„Ç…ëóêMÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉÅÉbÉZÅ[ÉWÇÕÅAèäóLé“ÇÃèâä˙ê›íËÇÉçÅ[ÉhÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB

éüÇà API ÇégópÇ∑ÇÈÇΔÅAí ímÇÃìoò^ÇΔǪÇÃâèúÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

OSErr FolderManagerRegisterNotificationProc (
            FolderManagerNotificationUPP notifyProc,
            void * refCon,
            UInt32 options);
         
OSErr FolderManagerUnregisterNotificationProc (
            FolderManagerNotificationUPP notifyProc,
            void * refCon);
         

FolderManagerRegisterNotificationProc () ÇégópÇ∑ÇÈÇΔÅAFolder Manager Ç…ÇÊÇËí ímä÷êîÇìoò^Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBnotifyProc ÉpÉâÉÅÅ[É^ÇÕÅAí ímä÷êîÇ÷ÇÃÉ|ÉCÉìÉ^Ç‹ÇΩÇÕ UPP Ç≈Ç∑ÅBrefCon ÉpÉâÉÅÅ[É^ÇÕÉfÉxÉçÉbÉpÇ™ìΔé©Ç…égópÇ≈Ç´Ç‹Ç∑ÅBǬNjÇËÅADZÇÃílÇÕí ímä÷êîÇåƒÇ—èoÇ∑ÇΩÇ—Ç…ÅAǪÇÃí ímä÷êîÇ…ìnÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉIÉvÉVÉáÉìÉpÉâÉÅÅ[É^ÇÕìoò^ÉIÉvÉVÉáÉìÇéwíËǵNjÇ∑ÅB

åªç›ÇÕÅAkDoNotRemoveWhenCurrentApplicationQuitsBit íËêîÇ…ÇÊǡǃÇΩÇæàÍǬÇÃÉIÉvÉVÉáÉìÇæÇØÇéwíËÇ≈Ç´Ç‹Ç∑ÅBDZÇÃÉrÉbÉgÇÉZÉbÉgÇ∑ÇÈÇΔÅAåªç›ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™èIóπÇ∑ÇÈÇΔǴDžLJÅAí ímä÷êîÇçÌèúǵǻǢÇÊǧDž Folder Manager Ç…éwé¶Ç≈Ç´Ç‹Ç∑ÅBDZÇÃÉrÉbÉgÇÉZÉbÉgǵǻǢÇΔÅAdžÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉRÉìÉeÉLÉXÉgì‡Ç≈ìoò^Ç≥ÇÍǃǢÇÈí ímä÷êîÇÕÅAǪÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™èIóπÇ∑ÇÈÇΔÇ´Ç…é©ìÆìIÇ…çÌèúÇ≥ÇÍǃǵNjǢNjÇ∑ÅBÉVÉXÉeÉÄãNìÆéûÇ…í ímÇìoò^Ç∑ÇÈÉvÉçÉOÉâÉÄÇ≈ÇÕÅAïKÇ∏DZÇÃÉrÉbÉgÇÉZÉbÉgǵǃÇ≠ÇæÇ≥Ç¢ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕí èÌ Folder Manager ÇÃí ímÇéÛêMÇ∑ÇÈïKóvǙǻǢÇΩÇflÅAÇΩǢǃǢÇÃèÍçáÇÕDZÇÃÉrÉbÉgÇÉZÉbÉgǵǃǮÇ≠ïKóvǙdžÇËÇ‹Ç∑ÅB

FolderManagerUnregisterNotificationProc () ÇégópÇ∑ÇÈÇΔÅAí ímä÷êîÇ Folder Manager ÇÃÉLÉÖÅ[Ç©ÇÁçÌèúÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBnotifyProc ÉpÉâÉÅÅ[É^ÇÕÅAFolderManagerRegisterNotificationProc () ä÷êîÇ…ìnǵÇΩí ímä÷êîÇ÷ÇÃÉ|ÉCÉìÉ^Ç‹ÇΩÇÕ UPP Ç≈Ç∑ÅBrefCon ÉpÉâÉÅÅ[É^ÇÕÅAFolderManagerRegisterNotificationProc () ä÷êîÇ…ìnǵÇΩ refCon ÉpÉâÉÅÅ[É^ÇΔìØÇ∂ílÇ≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB

í ímä÷êîÇÃÉvÉçÉgÉ^ÉCÉvÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB

typedef OSStatus (*FolderManagerNotificationProcPtr) (
            OSType message,
            void * arg,
            void * userRefCon);
         

DZÇÃä÷êîÇÕÅAÇ∑Ç◊ǃÇà Folder Manager í ímÇ…ëŒÇµÇƒåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBmessage ÉpÉâÉÅÅ[É^Ç…ÇÕí ímÇÃÉ^ÉCÉvÅiÉÜÅ[ÉUÉçÉOÉCÉìÅAÉÜÅ[ÉUÉçÉOÉAÉEÉgǻǫÅjÇ™ä‹Ç‹ÇÍÅAarg ÉpÉâÉÅÅ[É^Ç…ÇÕí«â¡èÓïÒÅiLJǵdžÇÍÇŒÅjÇ÷ÇÃÉ|ÉCÉìÉ^Ç™ä‹Ç‹ÇÍÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAuserRefCon ÉpÉâÉÅÅ[É^ÇÕÅAä÷êîÇ™ìoò^Ç≥ÇÍÇΩÇΔÇ´Ç…íÒãüÇ≥ÇÍÇÈílÇ≈Ç∑ÅBuserRefCon ÇÕìΔé©Ç…égópÇ≈Ç´ÅAïKóvÇ…âûÇ∂ǃîCà”ÇÃílÅiÉOÉçÅ[ÉoÉãÇ‹ÇΩÇÕǪÇÃëºÇÃÉXÉeÅ[É^ÉXèÓïÒÇ÷ÇÃÉ|ÉCÉìÉ^ǻǫÅjÇéwíËÇ≈Ç´Ç‹Ç∑ÅB

ëOèqÇà 4 ǬÇÃí ímÇÃèÍçáÅAarg ÇÕ FindFolderUserRedirectionGlobals ç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^Ç…Ç»ÇËÇ‹Ç∑ÅB

struct FindFolderUserRedirectionGlobals {
	UInt32 version;
	UInt32 flags;
         
	Str31  userName;
	short  userNameScript;
         
	short  currentUserFolderVRefNum;
	long   currentUserFolderDirID;
         
	short  remoteUserFolderVRefNum;
	long   remoteUserFolderDirID;
};
         

Ç≥ÇÁÇ…ÅAç≈èâÇà 4 ǬÇÃí ímÇΔÇÕNjǡÇΩÇ≠àŸÇ»ÇÈëÊ 5 ÇÃí ímÇ™ë∂ç›ÇµÅADZÇÍÇÕàÍïîÇÃÉfÉxÉçÉbÉpÇ…ÇÃÇ›égópÇ≥ÇÍÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB

kFolderManagerNotificationDiscardCachedData

Folder Manager ÇÃÉLÉÉÉbÉVÉÖÇ™ÉtÉâÉbÉVÉÖÇ≥ÇÍÇΩÇΔÇ´Ç…ÉTÅ[ÉhÉpÅ[ÉeÉBÇÃÉ\ÉtÉgÉEÉFÉAÇ…ÇÊǡǃëóêMÇ≥ÇÍÇ‹Ç∑ÅB

DZÇÃèÍçáÅAarg ÇÕíËã`Ç≥ÇÍǃǢNjÇπÇÒÅB



êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

É}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈǩǫǧǩÇÃéØï 

éüÇÃÇÊǧDžÅAGestalt API ÇΔíËã`çœÇ›Çà gestaltMultipleUsersStateÅi'mfdr'ÅjíËêîÇégópǵNjÇ∑ÅB

GestaltRecHand result;
if (Gestalt (gestaltMultipleUsersState, (long*) &result) == noErr &&
     (*result)->giVersion > 0)
      {
      // é¿ç€ÇÃèàóù
      }

ǻǮÅAGestalt () åƒÇ—èoǵÇÃé¿çsåãâ ÇÕéüÇÃç\ë¢ëÃÇ÷ÇÃÉnÉìÉhÉãÇ…Ç»ÇËÇ‹Ç∑ÅBDZÇÃÉnÉìÉhÉãÇîpä¸ÇµÇ»Ç¢Ç≈Ç≠ÇæÇ≥Ç¢ÅB

É}ÉãÉ`ÉÜÅ[ÉUÇ…ëŒâûǵÇΩ GestaltRecHand ç\ë¢ëÃÇÃåªç›ÇÃÉoÅ[ÉWÉáÉìÇÕ 6ÅigestaltMultipleUsersStateVersÅjÇ≈džÇËÅADZÇÃç\ë¢ëÃǪÇÃLJÇÃÇÕà»â∫ÇÃÇÊǧDžíËã`Ç≥ÇÍǃǢNjÇ∑ÅB

#pragma options align=mac68k
#pragma options align=reset
         
typedef struct { // gestalt info ç\ë¢ëÃ
 
 // ÉoÅ[ÉWÉáÉì 1 ÇÃÉtÉBÅ[ÉãÉh
 
 short         giVersion;              // ç\ë¢ëÃÇÃÉoÅ[ÉWÉáÉì
                                       //Åi0 = ñ≥å¯Åj
 
 short         giReserved0;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 short         giReserved1;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 short         giReserved2;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 short         giReserved3;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 FSSpec        giReserved4;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
         
 // ÉoÅ[ÉWÉáÉì 2 ÇÃÉtÉBÅ[ÉãÉh
 
 short         giDocsVRefNum;          // ÉÜÅ[ÉUèëófiÇÃï€ë∂èÍèäÇÃ
                                       // vrefnumÅiÉtÉçÉbÉsÅ[è„Ç…ë∂ç›
                                       // ǵǻǢèÍçáÇÃÇ›óLå¯Åj
                                       
 long          giDocsDirID;            // ÉÜÅ[ÉUèëófiÉtÉHÉãÉ_ÇÃ
                                       // ÉfÉBÉåÉNÉgÉä IDÅiÉtÉçÉbÉsÅ[è„Ç…
                                       // ë∂ç›ÇµÇ»Ç¢èÍçáÇÃÇ›óLå¯Åj
 
 short         giForceSaves;           // ÉÜÅ[ÉUÇ™é©ï™ÇÃèëófiÉtÉHÉãÉ_Ç…
                                       // ï€ë∂ÇπÇ¥ÇÈÇǶǻǢèÍçáÇÕ
                                       // TRUE
         
 short         giForceOpens;           // ÉÜÅ[ÉUÇ™é©ï™ÇÃèëófiÉtÉHÉãÉ_Ç©ÇÁ
                                       // äJǩǥÇÈÇǶǻǢèÍçáÇÕ
                                       // TRUE
 
 Str31         giWorkgroupName;        // åªç›ÇÃÉèÅ[ÉNÉOÉãÅ[ÉvÇÃñºëO
                                       // ÅiMacintosh Manager ÇÃèÍçáÅj
 
 Str31         giUserName;             // åªç›ÇÃÉÜÅ[ÉUÇÃñºëO
 
 Str31         giFrontAppName;         // ç≈ëOñ Ç…džÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃ
                                       // ñºëO
 
 short         giReserved5;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 
 short         giIsOn;                 // É}ÉãÉ`ÉÜÅ[ÉUã@î\Ç‹ÇΩÇÕ
                                       // Macintosh Manager Ç™åªç›
                                       // ÉIÉìDžǻǡǃǢÇÈèÍçáÇÕ TRUE
 
 // ÉoÅ[ÉWÉáÉì 3 ÇÃÉtÉBÅ[ÉãÉh - ÉoÅ[ÉWÉáÉì 3 Ç≈ÇÕÉtÉBÅ[ÉãÉhÇÃí«â¡ÇÕdžÇËÇ‹ÇπÇÒÇ≈ǵÇΩ
 // ÉoÅ[ÉWÉáÉì 4 ÇÃÉtÉBÅ[ÉãÉh
 
 short         giUserLoggedInType;     // ÉçÉOÉCÉìǵÇΩÉÜÅ[ÉUÇÃÉ^ÉCÉv
 
 char          giUserEncryptPwd[16];   // à√çÜâªÇ≥ÇÍǃǢÇÈÉÜÅ[ÉUÉpÉXÉèÅ[Éh
                                       // ÅiìΔé©ÇÃä»ó™å`éÆÅj
 
 short         giUserEnvironment;      // ÉÜÅ[ÉUÇ™ÉçÉOÉCÉìǵÇΩ
                                       // ä¬ã´
 
 long          giReserved6;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 long          giReserved7;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 
 Boolean       giDisableScrnShots;     // ÉXÉNÉäÅ[ÉìÉVÉáÉbÉgÇÃçÏê¨Ç™
                                       // ãñâ¬Ç≥ÇÍǃǢÇÈèÍçáÇÕ TRUE
 
 // ÉoÅ[ÉWÉáÉì 5 ÇÃÉtÉBÅ[ÉãÉh
 
 Boolean       giSupportsAsyncFSCalls; // Finder ÇÕDZÇÃÉtÉBÅ[ÉãÉhÇégǡǃÅA
                                       // DZÇÃÉpÉbÉ`Ç™îÒìØä˙ÉgÉâÉbÉvÉpÉbÉ`Ç
                                       // ÉTÉ|Å[ÉgÇ∑ÇÈǩǫǧǩÇéØï Ç∑ÇÈ
 
 short         giPrefsVRefNum;         // èâä˙ê›íËÇà vrefnum
 
 long          giPrefsDirID;           // èâä˙ê›íËÉ{ÉäÉÖÅ[ÉÄè„DždžÇÈÅuAt Ease
                                       //  ItemsÅvÉtÉHÉãÉ_Çà dirID
 
 unsigned long giUserLogInTime;        // ÉÜÅ[ÉUÇ™ÉçÉOÉCÉìǵÇΩÇΔÇ´ÇÃ
                                       // ïbíPà ÇÃéûçèÅi0 Ç‹ÇΩÇÕ 1 ÇÕ
                                       // ÉçÉOÉCÉìǵǃǢǻǢDZÇΔÇé¶Ç∑Åj
 
 Boolean       giUsingPrintQuotas;     // ÉçÉOÉCÉìÉÜÅ[ÉUÇ™ÉvÉäÉìÉ^ÉNÉHÅ[É^Ç
                                       // égópǵǃǢÇÈèÍçáÇÕ TRUE
 
 Boolean       giUsingDiskQuotas;      // ÉçÉOÉCÉìÉÜÅ[ÉUÇ™ÉfÉBÉXÉNÉNÉHÅ[É^Ç
                                       // ÉAÉNÉeÉBÉuDžǵǃǢÇÈèÍçáÇÕ TRUE
 
 // ÉoÅ[ÉWÉáÉì 6 ÇÃÉtÉBÅ[ÉãÉh
 
 Boolean       giInSystemAccess;       // ÉVÉXÉeÉÄÉAÉNÉZÉXÉÇÅ[ÉhDžǻǡǃǢÇÈ
                                       // èÍçáÅiǬNjÇËÅAèäóLé“Ç™ÉçÉOÉCÉì
                                       // ǵǃǢÇÈèÍçáÅjÇÕ TRUE
 
 Boolean       giUserFolderEnabled;    // FindFolder Ç™ÉtÉHÉãÉ_ÇÉäÉ_ÉCÉåÉNÉg
                                       // ǵǃǢÇÈèÍçáÅiÉÜÅ[ÉUÇ…ëŒâûÇ∑ÇÈ
                                       // giUserName ÇégópǵǃÅjÇÕ TRUE
 
 short         giReserved8;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
 long          giReserved9;            // [LJÇÕÇ‚égópÇ≥ÇÍǻǢ]
         
 Boolean       giInLoginScreen;        // ÉÜÅ[ÉUÅièäóLé“LJä‹ÇflǃÅjǙNjǡÇΩÇ≠
                                       // ÉçÉOÉCÉìǵǃǢǻǢèÍçáÇÕ TRUE
 
 //
 // è´óàÅADZÇÃÇŸÇ©ÇÃÉtÉBÅ[ÉãÉhÇ™í«â¡Ç≥ÇÍÇÈâ¬î\ê´Ç™Ç†ÇÈÇΩÇflÅA
 // sizeof (GestaltRec) ÇÕÉ`ÉFÉbÉNǵǻǢÇ≈Ç≠ÇæÇ≥Ç¢
 //
} GestaltRec, *GestaltRecPtr, **GestaltRecHand;
         
// giUserLoggedInType ÇÃíl
//ÅiAEFWÅAMM ÇÃÇ›ìKâûÅAÉ}ÉãÉ`ÉÜÅ[ÉUÇ≈ÇÕégópÇ≥ÇÍǻǢÅj
enum {
 kMUUserTypeNormal      = 0, // ÉfÉtÉHÉãÉgÇÕí èÌÉÜÅ[ÉU
 kMUUserTypeWGAdmin     = 1, // ÉèÅ[ÉNÉOÉãÅ[Évä«óùé“É^ÉCÉv
 kMUUserTypeGlobalAdmin = 2  // ÉOÉçÅ[ÉoÉãä«óùé“É^ÉCÉvÅiÉXÅ[ÉpÅ[ÉÜÅ[ÉUÅj
};
         
// giUserEnvironment ÇÃíl
enum {
 kMUEnvironmentPanels       = 0, // ÉpÉlÉãä¬ã´
 kMUEnvironmentFinder       = 1, // í èÌä¬ã´ÅiÇ‹ÇΩÇÕ Finder ÇÃñ≥êßå¿ÉÇÅ[ÉhÅj
 kMUEnvironmentFinderSecure = 2  // êßå¿ïtÇ´ä¬ã´ÅiÇ‹ÇΩÇÕ Finder ÇÃêßå¿ïtÉÇÅ[ÉhÅj
}; 

íçà”ÅF
At Ease ÇΔ Macintosh Manager LJ 'mfdr' Gestalt íËêîÇìoò^ǵNjÇ∑Ç™ÅAGestaltRec ç\ë¢ëÃÇÃà»ëOÇÃÉoÅ[ÉWÉáÉìÇégópÇ∑ÇÈÇÊǧDžǵǃÇ≠ÇæÇ≥Ç¢ÅBëºÇÃÉtÉBÅ[ÉãÉhÇ…ÉAÉNÉZÉXÇ∑ÇÈëOÇ…ÅAïKÇ∏ç\ë¢ëÃÇÃÉoÅ[ÉWÉáÉìÅigiVersionÅjÇÉ`ÉFÉbÉNǵǃÇ≠ÇæÇ≥Ç¢ÅB.



êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

É}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™ÉAÉNÉeÉBÉuÇ≈džÇÈǩǫǧǩÇÃéØï 

É}ÉãÉ`ÉÜÅ[ÉU gestalt ÇÃë∂ç›ÇÉ`ÉFÉbÉNǵÅAgiIsOn ÉtÉBÅ[ÉãÉhÇÃílÇï]âøÇµÇƒÅAÉ}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™ÉAÉNÉeÉBÉudžÇÈǩǫǧǩÇîªífǵNjÇ∑ÅBDZÇÍà»ç~ÇÃÇ∑Ç◊ǃÇÃéøñ‚ÇÃèÍçáÇÕÅAñ⁄ìIÇÃÉ`ÉFÉbÉNÇçsǧëOÇ…É}ÉãÉ`ÉÜÅ[ÉUÇ™é¿çsíÜÇ≈džÇÈDZÇΔÇïKÇ∏ämîFǵǃÇ≠ÇæÇ≥Ç¢ÅB

Boolean IsMultipleUsersOn (void)
{
 GestaltRecHand result;
 
 if (Gestalt (gestaltMultipleUsersState, (long *) &result) == noErr &&
     (*result)->giVersion >= 2 && (*result)->giIsOn)
     return true;
 else
     return false;
}


êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

ÉçÉOÉCÉìÇ≥ÇÍǃǢÇÈÉÜÅ[ÉUèÓïÒ

ÉÜÅ[ÉUÇ™åªç›ÉçÉOÉCÉìǵǃǢǻǢǩǫǧǩÇÕÇ«ÇÃÇÊǧDžǵǃéØï Ç≈Ç´Ç‹Ç∑Ç©ÅH

Ç‹Ç∏É}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™ÉAÉNÉeÉBÉuDžǻǡǃǢÇÈDZÇΔÇämîFǵÇΩå„Ç≈ÅAgiInLoginScreen ÉtÉBÅ[ÉãÉhÇÃílÇï]âøÇµÇƒÅAÉ}ÉVÉìÇ™åªç›ÉçÉOÉCÉìÉXÉNÉäÅ[ÉìÉÇÅ[ÉhÇ…ì¸Ç¡ÇƒÇ¢ÇÈǩǫǧǩÇîªífǵNjÇ∑ÅBÇ‹ÇΩÅAìΔé©ÇÃí ímä÷êîÇìoò^ǵÅAÉçÉOÉCÉìí ímÇΔÉçÉOÉAÉEÉgí ímÇÃä‘Ç≈ÅAÉÜÅ[ÉUÇ™ÉçÉOÉCÉìǵǃǢÇÈǩǫǧǩÇîFéØÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB

èäóLé“à»äOÇÃÉÜÅ[ÉUÇ™ÉçÉOÉCÉìǵǃǢÇÈǩǫǧǩÇÕÇ«ÇÃÇÊǧDžǵǃéØï Ç≈Ç´Ç‹Ç∑Ç©ÅH

ëOèqǵÇΩÇÊǧDž Gestalt API ÇégópǵNjÇ∑ÅBgiUserLogInTime Ç™ > 1 Ç≈džÇÍÇŒÅAèäóLé“à»äOÇÃÉÜÅ[ÉUÇ™ÉçÉOÉCÉìǵǃǢNjÇ∑ÅBèäóLé“Ç™ÉçÉOÉCÉìǵǃǢÇÈèÍçáÅAgiUserLogInTime ÇÃílÇÕ 0 Ç…Ç»ÇËÅAgiInSystemAccess ÇÕ TRUE Ç…Ç»ÇËÇ‹Ç∑ÅB

Boolean IsUserLoggedIn (void)
{
 GestaltRecHand result;
 
 if (Gestalt (gestaltMultipleUsersState, (long *) &result) == noErr &&
     (*result)->giVersion >= 5 && (*result)->giIsOn &&
     (*result)->giUserLogInTime > 1)
     return true;
 else
     return false;
}


êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

ÉÜÅ[ÉUñºÇΔÉpÉXÉèÅ[Éh

ëΩÇ≠ÇÃÉfÉxÉçÉbÉpÇÕÉÜÅ[ÉUñºÇÃéØï ï˚ñ@Ç‚ÉpÉXÉèÅ[ÉhǙǫÇÃÇÊǧï€åÏÇ≥ÇÍǃǢÇÈǩDžǬǢǃímÇËÇΩÇ¢Ç≈ǵÇÂǧÅB

Ç‹Ç∏ giUserLoginTime ÉtÉBÅ[ÉãÉhÇÃílÇÉ`ÉFÉbÉNǵǃÅAǪÇÍÇ™ 1 ÇÊÇËëÂǴǢDZÇΔÇämîFǵNjÇ∑ÅBDZÇÃÉtÉBÅ[ÉãÉhÇÃílÇ™ 1 ÇÊÇËëÂÇ´Ç¢èÍçáÇÕÅAgiUserName ÉtÉBÅ[ÉãÉhÇÃílÇÉ`ÉFÉbÉNǵǃÅAÉÜÅ[ÉUÇÃñºëOÇéÊìæÇµÇ‹Ç∑ÅBÇ‹ÇΩÅAìΔé©ÇÃí ímä÷êîÇìoò^ǵǃÅAÉçÉOÉCÉìí ímÇéÛêMÇ∑ÇÈï˚ñ@LJdžÇËÇ‹Ç∑ÅBÉçÉOÉCÉìí ímÇÕÅAFindFolderUserRedirectionGlobals ÇÃíÜÇ≈ÉÜÅ[ÉUñºÇéwìEǵNjÇ∑ÅBÇΩÇæÇµÅAèäóLé“Ç™ÉçÉOÉCÉìÇ∑ÇÈÇΔÇ´ÅAglobals ç\ë¢ëÃÇÕÉÜÅ[ÉUñºÇÃë„ÇÌÇËÇ…ãÛîíï∂éöóÒÇé¶Ç∑ì_Ç…íçà”ǵǃÇ≠ÇæÇ≥Ç¢ÅB

void GetUserName (Str255 userName)
{
 GestaltRecHand result;
 
 userName [0] = 0;
 if (Gestalt (gestaltMultipleUsersState, (long *) &result) == noErr &&
     (*result)->giVersion >= 5 && (*result)->giIsOn &&
     (*result)->giUserLogInTime > 1)
     BlockMoveData ((*result)->giUserName, userName,
                    (*result)->giUserName [0] + 1);
}

ÉÜÅ[ÉUÇÃÉpÉXÉèÅ[ÉhÇÕ Multiple User ÉfÅ[É^ÉxÅ[ÉXÇÃíÜÇ…à√çÜâªÇ≥ÇÍǃäiî[Ç≥ÇÍÅAåàǵǃïúçÜâªâ¬î\Ç»å`éÆÇ…ÇÕÇ»ÇËÇ‹ÇπÇÒÅBâΩÇÁÇ©ÇÃë„ë÷ÉpÉXÉèÅ[ÉhÉvÉâÉOÉCÉìÇégópǵǃǢÇÈèÍçáÇÕÅAèÓïÒÇ™à¿ëSÇ…äiî[Ç≥ÇÍÇÈDZÇΔÇï€èÿÇ∑ÇÈÇÃÇÕÉvÉâÉOÉCÉìÇÃêªë¢å≥ÇÃê”îCÇ…Ç»ÇËÇ‹Ç∑ÅB

íçà”ÅFÉÜÅ[ÉUÇÃÉpÉXÉèÅ[ÉhÇÕéÊìæÇ≈Ç´Ç‹ÇπÇÒ


êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

ǪÇÃëºÇÃíçà”éñçÄÇΔÉRÉÅÉìÉg

  • ëPó«Ç»ÇÈÉ}ÉãÉ`ÉÜÅ[ÉUésñØÇ≈džÇÈÇΩÇflÇ…ÇÕÅAè≠Ç»Ç≠ÇΔLJǪÇÃëOíÒÇΔǵǃëPó«Ç»ÇÈ NetBoot ésñØÇ≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅiè⁄ç◊DžǬǢǃÇÕÅAÉeÉNÉjÉJÉãÉmÅ[Ég 1151 ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅjÅB

  • éüÇ…é¶Ç∑ñ‚ëËǪÇÍé©ëÃÇÕÉ}ÉãÉ`ÉÜÅ[ÉUã@î\ÇÃñ‚ëËÇ≈ÇÕdžÇËÇ‹ÇπÇÒÇ™ÅAÉ}ÉãÉ`ÉÜÅ[ÉUã@î\ǙDZÇÃñ‚ëËÇÇ≥ÇÁÇ…à´âªÇ≥ÇπÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBàÍïîÇÃÉvÉçÉZÉXÇÕÅAÉfÅ[É^Ç‹ÇΩÇÕÉRÅ[ÉhÇÉVÉFÉãÇÃÉqÅ[ÉvÅAÇ‹ÇΩèÍçáÇ…ÇÊǡǃÇÕç≈èâÇ…ãNìÆÇ∑ÇÈÉvÉçÉZÉXÇÃÉqÅ[ÉvÇ…äiî[Ç∑ÇÈÇÊǧDžÉÅÉÇÉäÇäÑÇËìñǃÅADZÇÃÉvÉçÉZÉXÇà A5 ílÇÃÇÊǧǻÉXÉeÅ[ÉgïœêîÇÃÉRÉsÅ[ÇçÏê¨ÇµÇ‹Ç∑ÅBí èÌÅADZÇÃÇÊǧǻì¡àŸÇ»ÉvÉçÉZÉXÇÃë„ï\äiÇÕ Finder Ç≈Ç∑Ç™ÅAFinder ÇÕÉÜÅ[ÉUÇ™ÅuçƒãNìÆÅvÇ‹ÇΩÇÕÅuÉVÉXÉeÉÄèIóπÅvÇëIëÇ∑ÇÈÇ‹Ç≈ÉÅÉÇÉäÇ©ÇÁÉNÉäÉAÇ≥ÇÍÇÈDZÇΔǙǻǢÇΩÇflÅAëOèqÇÃÇÊǧǻàÍïîÇÃÉvÉçÉZÉXÇÃìÆçÏǙDZÇÍÇ‹Ç≈ëÂñ‚ëËÇ…Ç»ÇÈDZÇΔÇÕdžÇËÇ‹ÇπÇÒÇ≈ǵÇΩÅB
    ǵǩǵÉ}ÉãÉ`ÉÜÅ[ÉUã@î\Ç™é¿çsÇ≥ÇÍǃǢÇÈÇΔÅAÉVÉFÉãÇ‚ç≈èâÇ…ãNìÆÇ≥ÇÍÇÈÉvÉçÉZÉXÇÕÉÜÅ[ÉUÉçÉOÉCÉìÇΔÇΔLJDžÉÅÉÇÉäÇ©ÇÁÉNÉäÉAÇ≥ÇÍÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅB
    ǪÇÃåãâ ÅAǪÇÃÉqÅ[ÉvÇ…äÑÇËìñǃÇÁÇÍǃǢÇΩÉÅÉÇÉäÇÕÉpÅ[ÉWÇ≥ÇÍǃǵNjǢNjÇ∑ÅBǪDZDžÉfÅ[É^Ç™äiî[Ç≥ÇÍǃǢÇÈÇΔÅAìñëRǪÇÃÉfÅ[É^ÇÕé∏ÇÌÇÍÇÈDZÇΔÇ…Ç»ÇËÅAǪDZDžÉRÅ[ÉhÇ™äiî[Ç≥ÇÍǃǢÇÈèÍçáÇÕÅAǪÇÃÉRÅ[ÉhÇÉCÉìÉXÉgÅ[ÉãǵÇΩÉvÉçÉZÉXǙǪÇÍÇé¿çsǵÇÊǧÇΔǵÇΩèuä‘ÉNÉâÉbÉVÉÖǵǃǵNjǢNjÇ∑ÅB

    DZÇÃÇΩÇflÅAÉÅÉÇÉäÇÕÇ≈Ç´ÇÈǩǨÇËÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉqÅ[Évì‡Ç…äÑÇËìñǃÅAǪÇÍÇ™ïsâ¬î\Ç»èÍçáÇÕÉVÉXÉeÉÄÉqÅ[Évì‡Ç…äÑÇËìñǃÇÈÇÊǧDžǵǃÅAç°å„ÇÕÉVÉFÉãì‡Ç‚ç≈èâÇ…ãNìÆÇ∑ÇÈÉvÉçÉZÉXì‡Ç…ÇÕÉÅÉÇÉäÇäÑÇËìñǃǻǢÇÊǧDžǵǃÇ≠ÇæÇ≥Ç¢ÅBÇ‹ÇΩÅADZÇÃÉvÉçÉZÉXÇÃÉXÉeÅ[ÉgïœêîÇÃóLå¯Ç»ÉRÉsÅ[Çï€éùÇ≈Ç´ÇÈDZÇΔÇëOíÒDžǵǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅB
  • Macintosh Manager ÇóòópǵǃǢÇÈèÍçáÅAèâä˙ê›íËÉtÉHÉãÉ_ÇÕÉTÅ[ÉoÉ{ÉäÉÖÅ[ÉÄÇ…à íuǵNjÇ∑ÅBÉTÅ[ÉoÇ…ê⁄ë±Ç≥ÇÍǃǢÇÈÉNÉâÉCÉGÉìÉgÇÕÇ∑Ç◊ǃìØÇ∂ÉoÅ[ÉWÉáÉìÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇóòópǵǃǢÇÈÇΔÇÕå¿ÇÁǻǢÇÃÇ≈ÅAèâä˙ê›íËÉtÉ@ÉCÉãÇÃå√Ç¢ÉoÅ[ÉWÉáÉìÇ‚êVǵǢÉoÅ[ÉWÉáÉìÇ™ë∂ç›Ç∑ÇÈèÍçáÇ≈LJê≥ǵÇ≠ìÆçÏÇ∑ÇÈDZÇΔÇ™èdóvÇ≈Ç∑ÅB


êÊì™ÉyÅ[ÉWÇ…ñflÇÈ

óvñÒ

É}ÉãÉ`ÉÜÅ[ÉUã@î\ÇΔÇÃå›ä∑ê´ÇämóßÇ∑ÇÈÇ…ÇÕÅAïKÇ∏ FindFolder API ÇÇ≤óòópâ∫Ç≥Ç¢ÅBÉtÉ@ÉCÉãÉVÉXÉeÉÄÇ÷ÇÃÉAÉNÉZÉXÇÕ afpAcessDeniedÅi-5000ÅjǻǫÇÃÇÊǧDžÅAó\ä˙ǵǻǢÉGÉâÅ[ÉRÅ[ÉhÇ™ï‘ǡǃǴǃLJÅAâΩÇæÇ©ÇÃå`Ç≈èàóùÇ≈Ç´ÇÈDZÇΔÇ™èdóvÇ≈Ç∑ÅBÇ‹ÇΩÅAFinder ÇÕïKÇ∏ǵLJìÆçÏǵǃǢǻǢÇÃÇ≈ÅAFinder ÉvÉçÉZÉXÇ™ë∂ç›ÇµÇ»Ç¢èÍçáÇÃçló∂Ç™ïKóvÇ≈Ç∑ÅB

êVǵǢí ímä÷êîÇ‚ gestaltMultipleUsersState Çà Gestalt ÉZÉåÉNÉ^ÇóòópÇ∑ÇÈÇΔÅAÉ}ÉãÉ`ÉÜÅ[ÉUã@î\Ç…çXÇ…çÇìxÇ…ëŒâûÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB


éQçlï∂å£


êÊì™ÉyÅ[ÉWÇ…ñflÇÈ


Updated: 27-September-99