home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!caen!zaphod.mps.ohio-state.edu!usc!lkimes
- From: lkimes@alshain.usc.edu (Lance 'Moof' Kimes)
- Newsgroups: comp.sys.mac.programmer
- Subject: Re: Unlocking a locked volume
- Date: 11 Dec 1992 12:03:22 -0800
- Organization: University of Southern California, Los Angeles, CA
- Lines: 69
- Distribution: world
- Message-ID: <1gas6aINNeg8@alshain.usc.edu>
- References: <cmcclary-101292152155@mcclary-mac.ucs.indiana.edu>
- NNTP-Posting-Host: alshain.usc.edu
-
-
- In article <cmcclary-101292152155@mcclary-mac.ucs.indiana.edu>, cmcclary@ucs.indiana.edu (Charles McClary) writes:
- |> I assumed, from reading Inside Mac and Think Reference, that logically
- |> unlocking a logically locked volume would be as simple as:
- |>
- |> void unlock()
- |> {
- |> HVolumeParam pb;
- |> OSErr osErr;
- |> Str255 volumeName;
- |> SysEnvRec SysEnvData;
- |>
- |> osErr = SysEnvirons(1, &SysEnvData);
- |>
- |> pb.ioVRefNum = SysEnvData.sysVRefNum; /* use startup drive */
- |> pb.ioVolIndex = 0;
- |> pb.ioNamePtr = volumeName;
- |> pb.ioCompletion = nil;
- |>
- |> osErr = PBHGetVInfo(&pb, false); /* get volume info */
- |> if (osErr == noErr)
- |> {
- |> pb.ioVAtrb &= 0x7FFF; /* set unlock volume bit */
- |> osErr = PBSetVInfo(&pb, false);
- |> osErr = FlushVol(0, pb.ioVRefNum);
- |> }
- |> }
- |>
- |> However, the PBSetVInfo receives a -46 (vLckedErr - Volume is locked),
- |> which
- |> makes some sense. What am I missing to correct this?
- |>
- |> Thanks in advance,
- |>
- |> Charles McClary
- |> Indiana University
- |> cmcclary@indiana.edu
-
-
- Here is some code I wrote awhile back.
-
- OSErr UnlockHD( short targetVRefNum)
- {
- OSErr Err;
- QHdrPtr VCBQHdrPtr;
- VCB *ssvcb;
-
- Err = nsvErr;
- VCBQHdrPtr = GetVCBQHdr();
- ssvcb = (VCB *)VCBQHdrPtr->qHead;
-
- while((ssvcb != nil) && (ssvcb->vcbVRefNum != targetVRefNum))
- ssvcb = (VCB *)ssvcb->qLink;
-
- if (ssvcb->vcbVRefNum == targetVRefNum)
- {
- if (!BitTst( &ssvcb->vcbAtrb, 0))
- return 0;
- BitClr( &ssvcb->vcbAtrb, 0);
- Err = FlushVol( nil, targetVRefNum);
- }
- return (Err);
- }
-
- It perfectly. Have fun.
-
-
- Lance Kimes
- Systems Programmer
-