home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / sys / mac / programm / 19675 < prev    next >
Encoding:
Internet Message Format  |  1992-12-11  |  2.2 KB

  1. Path: sparky!uunet!caen!zaphod.mps.ohio-state.edu!usc!lkimes
  2. From: lkimes@alshain.usc.edu (Lance 'Moof' Kimes)
  3. Newsgroups: comp.sys.mac.programmer
  4. Subject: Re: Unlocking a locked volume
  5. Date: 11 Dec 1992 12:03:22 -0800
  6. Organization: University of Southern California, Los Angeles, CA
  7. Lines: 69
  8. Distribution: world
  9. Message-ID: <1gas6aINNeg8@alshain.usc.edu>
  10. References: <cmcclary-101292152155@mcclary-mac.ucs.indiana.edu>
  11. NNTP-Posting-Host: alshain.usc.edu
  12.  
  13.  
  14. In article <cmcclary-101292152155@mcclary-mac.ucs.indiana.edu>, cmcclary@ucs.indiana.edu (Charles McClary) writes:
  15. |> I assumed, from reading Inside Mac and Think Reference, that logically 
  16. |> unlocking a logically locked volume would be as simple as:
  17. |> 
  18. |> void unlock()
  19. |> {
  20. |>     HVolumeParam    pb;
  21. |>     OSErr            osErr;
  22. |>     Str255            volumeName;
  23. |>     SysEnvRec        SysEnvData;
  24. |>     
  25. |>     osErr = SysEnvirons(1, &SysEnvData);
  26. |>     
  27. |>     pb.ioVRefNum = SysEnvData.sysVRefNum; /* use startup drive */
  28. |>     pb.ioVolIndex = 0;
  29. |>     pb.ioNamePtr = volumeName;
  30. |>     pb.ioCompletion = nil;
  31. |>     
  32. |>     osErr = PBHGetVInfo(&pb, false); /* get volume info */
  33. |>     if (osErr == noErr)
  34. |>     {
  35. |>         pb.ioVAtrb &= 0x7FFF; /* set unlock volume bit */
  36. |>         osErr = PBSetVInfo(&pb, false); 
  37. |>         osErr = FlushVol(0, pb.ioVRefNum);
  38. |>     }
  39. |> }
  40. |> 
  41. |> However, the PBSetVInfo receives a -46 (vLckedErr - Volume is locked),
  42. |> which 
  43. |> makes some sense.  What am I missing to correct this?
  44. |> 
  45. |> Thanks in advance,
  46. |> 
  47. |> Charles McClary
  48. |> Indiana University
  49. |> cmcclary@indiana.edu
  50.  
  51.  
  52. Here is some code I wrote awhile back.
  53.  
  54. OSErr UnlockHD( short targetVRefNum)
  55. {
  56.         OSErr           Err;
  57.         QHdrPtr         VCBQHdrPtr;
  58.         VCB                     *ssvcb;
  59.  
  60.         Err = nsvErr;
  61.         VCBQHdrPtr = GetVCBQHdr();
  62.         ssvcb = (VCB *)VCBQHdrPtr->qHead;
  63.  
  64.         while((ssvcb != nil) && (ssvcb->vcbVRefNum != targetVRefNum))
  65.                 ssvcb = (VCB *)ssvcb->qLink;
  66.  
  67.         if (ssvcb->vcbVRefNum == targetVRefNum)
  68.         {
  69.                 if (!BitTst( &ssvcb->vcbAtrb, 0))
  70.                         return 0;
  71.                 BitClr( &ssvcb->vcbAtrb, 0);
  72.                 Err = FlushVol( nil, targetVRefNum);
  73.         }
  74.         return (Err);
  75. }
  76.  
  77. It perfectly. Have fun.
  78.  
  79.  
  80. Lance Kimes
  81. Systems Programmer
  82.