HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0323
たろさんFDへの直接アクセス9解決


たろさん

リンク

2006/3/23(Thu) 11:21:57|NO.82

はじめまして。
HSPのことを全然しらない初心者です・・

・FDへ直接アクセスしたい(バイト単位で読み書きしたい)

FDを使って簡単なコピープロテクトを実現したく、調べています。
HSPでこのようなことはできるのでしょうか?

ご指導お願いします!



この記事に返信する


axobj

リンク

2006/3/23(Thu) 19:22:08|NO.84

chdir命令で、FDのドライブを指定、bsave命令、bload命令で読み書きします。



たろさん

リンク

2006/3/23(Thu) 21:03:40|NO.85

axobjさん、ありがとうございます!

HSPで可能なんですね!
アセンブラかCで、って思ってたので、楽になりそうです!

ありがとうございます。



たろさん

リンク

2006/4/3(Mon) 16:16:22|NO.211

> chdir命令で、FDのドライブを指定、bsave命令、bload命令で読み書きします。

試してみました。
うまくいかないのですが、FDのブートセクタの読み書きをしたいのですが、そのようなことは可能なのでしょうか?

ヘルプを見ると、bsave, bloadはファイルに対しての命令のような気がしています。

よろしくお願いいたします。



Irisawa

リンク

2006/4/3(Mon) 20:34:03|NO.215

> FDのブートセクタの読み書きをしたいのですが、そのようなことは可能なのでしょうか?

マシン語使えばできると思いますがワザワザ何故直接、そのようなことをしたいのでしょう
か。



t.hamaguti

リンク

2006/4/4(Tue) 00:06:41|NO.217

to たろさん

WinNT系とWin95/98系でデバイスにアクセスする方法が異なりますが、
Win32APIのDeviceIoControl関数をうまいこと使うと操作できます。
以下のサンプルはNT系用で、エラー処理もなく、AドライブにFDがあることが
前提なスクリプトですが参考までにどうぞ。(^_^;

#include "kernel32.as" #const null 0 // デバイスをオープン(決め打ち) device = "\\\\.\\A:" //#const GENERIC_READ $80000000 //#const FILE_SHARE_READ $00000001 //#const OPEN_EXISTING $00000003 //#const FILE_ATTRIBUTE_NORMAL $00000080 CreateFile varptr(device), $80000000, $1, null, $3, $80, null hDevice = stat ret = 0 // ボリュームをロック //#const FSCTL_LOCK_VOLUME $00090018 DeviceIoControl hDevice, $90018, null, 0, null, 0, varptr(ret), null // 物理ディスクのジオメトリ情報を取得 //#const IOCTL_DISK_GET_DRIVE_GEOMETRY $00070000 dim diskGeo, 6 DeviceIoControl hDevice, $70000, null, 0, varptr(diskGeo), 24, varptr(ret), null // 1セクタ読み込んでみる sdim buf, diskGeo(5) + 1 retSize = 0 ReadFile hDevice, varptr(buf), diskGeo(5), varptr(retSize), null // ボリュームのロックを解除 //#const FSCTL_UNLOCK_VOLUME $0009001C DeviceIoControl hDevice, $9001C, null, 0, null, 0, varptr(ret), null // 後始末 CloseHandle hDevice // OEMラベルを見てみる mes "OEM ver : "+ strmid(buf, $3, 8)



たろさん

リンク

2006/4/4(Tue) 09:32:10|NO.219

Irisawaさん

都合上、やる必要があるとしか・・
C++かアセンブラで、と思っていましたが、HSPで可能でしたら、早く実現できそうだと思いました。

t.hamagutiさん

やっぱりAPIを使用しないと難しいですよね(DeviceIOControlを使ったDelphiのサンプルをWebで見かけたような気がします)
この方向で考えてみます!ありがとうございました!



たろさん

リンク

2006/4/4(Tue) 09:49:00|NO.220

t.hamagutiさん

たびたびすみません。
95/98系でデバイスハンドルをオープンするのは、どんな方法があるのでしょうか?
HSP掲示板の内容から離れ、申し訳ありません。

よろしければ返信お願いいたします。



t.hamaguti

リンク

2006/4/5(Wed) 00:16:38|NO.232

to たろさん

> 95/98系でデバイスハンドルをオープンするのは、どんな方法があるのでしょうか?
Win95/98系でデバイスへアクセスするには、vwin32.vxdという仮想ドライバを介して
DOSのシステムコールを呼び出す形になります。
CreateFile関数の第一引数に"\\\\.\\vwin32"を渡してデバイスを開き、DeviceIoControl関数
にてIOCTL FunctionやAbsolute Read/Write等をコール、といった流れですが
私が説明するよりも下記のページの方が分かり易いかと思います。(^_^;

[Windows95で動作するディスクユーティリティの作成方法がわかりたい]
http://www7a.biglobe.ne.jp/~tsuneoka/win32sub/1.html



たろさん

リンク

2006/4/5(Wed) 10:27:05|NO.235

t.hamagutiさん

教えていただいたページを拝見しましたが、まさに知りたい内容でした!
ありがとうございました!



ONION software Copyright 1997-2021(c) All rights reserved.