本文整理汇总了C++中OFFSETOF函数的典型用法代码示例。如果您正苦于以下问题:C++ OFFSETOF函数的具体用法?C++ OFFSETOF怎么用?C++ OFFSETOF使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了OFFSETOF函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: wl_p2p_scan
int wl_p2p_scan(void *wl, uint16 sync_id, int isActive,
int numProbes, int activeDwellTime, int passiveDwellTime,
int num_channels, uint16 *channels)
{
wl_p2p_scan_t *params = NULL;
int params_size = 0;
int malloc_size = 0;
int nssid = 0;
int err = 0;
wl_escan_params_t *eparams;
malloc_size = sizeof(wl_p2p_scan_t);
malloc_size += OFFSETOF(wl_escan_params_t, params) +
WL_SCAN_PARAMS_FIXED_SIZE + WL_NUMCHANNELS * sizeof(uint16);
malloc_size += WL_SCAN_PARAMS_SSID_MAX * sizeof(wlc_ssid_t);
params = (wl_p2p_scan_t *)malloc(malloc_size);
if (params == NULL) {
fprintf(stderr, "Error allocating %d bytes for scan params\n", malloc_size);
return -1;
}
memset(params, 0, malloc_size);
eparams = (wl_escan_params_t *)(params+1);
params->type = 'E';
eparams->version = htod32(ESCAN_REQ_VERSION);
eparams->action = htod16(WL_SCAN_ACTION_START);
eparams->sync_id = sync_id;
memcpy(&eparams->params.bssid, ðer_bcast, ETHER_ADDR_LEN);
eparams->params.bss_type = DOT11_BSSTYPE_ANY;
eparams->params.scan_type = isActive ? 0 : WL_SCANFLAGS_PASSIVE;
eparams->params.nprobes = htod32(numProbes);
eparams->params.active_time = htod32(activeDwellTime);
eparams->params.passive_time = htod32(passiveDwellTime);
eparams->params.home_time = htod32(-1);
eparams->params.channel_num = 0;
memcpy(eparams->params.channel_list, channels, num_channels * sizeof(uint16));
eparams->params.channel_num = htod32((nssid << WL_SCAN_PARAMS_NSSID_SHIFT) |
(num_channels & WL_SCAN_PARAMS_COUNT_MASK));
params_size = sizeof(wl_p2p_scan_t) + sizeof(wl_escan_params_t) + WL_SCAN_PARAMS_FIXED_SIZE+
(num_channels * sizeof(uint16)) + (nssid * sizeof(wlc_ssid_t));
err = wlu_iovar_setbuf(wl, "p2p_scan", params, params_size, buf, WLC_IOCTL_MAXLEN);
free(params);
return err;
}
开发者ID:TheTypoMaster,项目名称:asuswrt,代码行数:52,代码来源:wlu_api.c
示例2: pcie_clkreq_upd
/* centralized clkreq control policy */
static void
pcie_clkreq_upd(pcicore_info_t *pi, uint state)
{
si_t *sih = pi->sih;
ASSERT(PCIE(sih));
if (!PCIE_GEN1(sih))
return;
switch (state) {
case SI_DOATTACH:
if (PCIEGEN1_ASPM(sih))
pcie_clkreq((void *)pi, 1, 0);
break;
case SI_PCIDOWN:
if (sih->buscorerev == 6) { /* turn on serdes PLL down */
si_corereg(sih, SI_CC_IDX, OFFSETOF(chipcregs_t, chipcontrol_addr),
~0, 0);
si_corereg(sih, SI_CC_IDX, OFFSETOF(chipcregs_t, chipcontrol_data),
~0x40, 0);
} else if (pi->pcie_pr42767) {
pcie_clkreq((void *)pi, 1, 1);
}
break;
case SI_PCIUP:
if (sih->buscorerev == 6) { /* turn off serdes PLL down */
si_corereg(sih, SI_CC_IDX, OFFSETOF(chipcregs_t, chipcontrol_addr),
~0, 0);
si_corereg(sih, SI_CC_IDX, OFFSETOF(chipcregs_t, chipcontrol_data),
~0x40, 0x40);
} else if (PCIEGEN1_ASPM(sih)) { /* disable clkreq */
pcie_clkreq((void *)pi, 1, 0);
}
break;
default:
ASSERT(0);
break;
}
}
开发者ID:3sOx,项目名称:asuswrt-merlin,代码行数:40,代码来源:nicpci.c
示例3: si_gpiotimerval
/* mask&set gpio timer val */
uint32
si_gpiotimerval(si_t *sih, uint32 mask, uint32 gpiotimerval)
{
si_info_t *sii;
sii = SI_INFO(sih);
if (sih->ccrev < 16)
return -1;
return (si_corereg(sih, SI_CC_IDX,
OFFSETOF(chipcregs_t, gpiotimerval), mask, gpiotimerval));
}
开发者ID:AKToronto,项目名称:htc-kernel-msm7227,代码行数:14,代码来源:siutils.c
示例4: buf_walk_init
static int
buf_walk_init(mdb_walk_state_t *wsp)
{
fmd_buf_hash_t bh;
if (mdb_vread(&bh, sizeof (bh), wsp->walk_addr) != sizeof (bh)) {
mdb_warn("failed to read fmd_buf_hash_t at %p", wsp->walk_addr);
return (WALK_ERR);
}
return (hash_walk_init(wsp, (uintptr_t)bh.bh_hash, bh.bh_hashlen,
"fmd_buf", sizeof (fmd_buf_t), OFFSETOF(fmd_buf_t, buf_next)));
}
开发者ID:AlainODea,项目名称:illumos-gate,代码行数:13,代码来源:fmd_mdb.c
示例5: init_pike_searching
void init_pike_searching(void)
{
start_new_program();
pike_search_struct_offset=ADD_STORAGE(struct pike_mem_searcher);
MAP_VARIABLE("__s", tStr, 0,
pike_search_struct_offset + OFFSETOF(pike_mem_searcher,s),
PIKE_T_STRING);
pike_search_program=end_program();
add_program_constant("Search",pike_search_program,ID_STATIC);
memsearch_cache=allocate_mapping(10);
memsearch_cache->data->flags |= MAPPING_FLAG_WEAK;
}
开发者ID:ajinkya007,项目名称:pike-1,代码行数:13,代码来源:pike_search.c
示例6: si_gpio_int_enable
uint32
si_gpio_int_enable(si_t *sih, bool enable)
{
si_info_t *sii;
uint offs;
sii = SI_INFO(sih);
if (sih->ccrev < 11)
return -1;
offs = OFFSETOF(chipcregs_t, intmask);
return (si_corereg(sih, SI_CC_IDX, offs, CI_GPIO, (enable ? CI_GPIO : 0)));
}
开发者ID:AKToronto,项目名称:htc-kernel-msm7227,代码行数:13,代码来源:siutils.c
示例7: DOSVM_HardwareInterruptRM
/**********************************************************************
* DOSVM_HardwareInterruptRM
*
* Emulate call to interrupt handler in real mode.
*
* Either calls directly builtin handler or pushes interrupt frame to
* stack and changes instruction pointer to interrupt handler.
*/
void DOSVM_HardwareInterruptRM( CONTEXT86 *context, BYTE intnum )
{
FARPROC16 handler = DOSVM_GetRMHandler( intnum );
/* check if the call goes to an unhooked interrupt */
if (SELECTOROF(handler) == 0xf000)
{
/* if so, call it directly */
TRACE( "builtin interrupt %02x has been invoked "
"(through vector %02x)\n",
OFFSETOF(handler)/DOSVM_STUB_RM, intnum );
DOSVM_CallBuiltinHandler( context, OFFSETOF(handler)/DOSVM_STUB_RM );
}
else
{
/* the interrupt is hooked, simulate interrupt in DOS space */
WORD flag = LOWORD( context->EFlags );
TRACE( "invoking hooked interrupt %02x at %04x:%04x\n",
intnum, SELECTOROF(handler), OFFSETOF(handler) );
/* Copy virtual interrupt flag to pushed interrupt flag. */
if (context->EFlags & VIF_MASK)
flag |= IF_MASK;
else
flag &= ~IF_MASK;
PUSH_WORD16( context, flag );
PUSH_WORD16( context, context->SegCs );
PUSH_WORD16( context, LOWORD( context->Eip ));
context->SegCs = SELECTOROF( handler );
context->Eip = OFFSETOF( handler );
/* Clear virtual interrupt flag and trap flag. */
context->EFlags &= ~(VIF_MASK | TF_MASK);
}
}
开发者ID:howard5888,项目名称:wineT,代码行数:46,代码来源:interrupts.c
示例8: SwitchStackTo16
/***********************************************************************
* SwitchStackTo (KERNEL.108)
*/
void WINAPI SwitchStackTo16( WORD seg, WORD ptr, WORD top )
{
STACK16FRAME *oldFrame, *newFrame;
INSTANCEDATA *pData;
UINT16 copySize;
if (!(pData = GlobalLock16( seg ))) return;
TRACE("old=%04x:%04x new=%04x:%04x\n",
SELECTOROF( NtCurrentTeb()->WOW32Reserved ),
OFFSETOF( NtCurrentTeb()->WOW32Reserved ), seg, ptr );
/* Save the old stack */
oldFrame = CURRENT_STACK16;
/* pop frame + args and push bp */
pData->old_ss_sp = (SEGPTR)NtCurrentTeb()->WOW32Reserved + sizeof(STACK16FRAME)
+ 2 * sizeof(WORD);
*(WORD *)MapSL(pData->old_ss_sp) = oldFrame->bp;
pData->stacktop = top;
pData->stackmin = ptr;
pData->stackbottom = ptr;
/* Switch to the new stack */
/* Note: we need to take the 3 arguments into account; otherwise,
* the stack will underflow upon return from this function.
*/
copySize = oldFrame->bp - OFFSETOF(pData->old_ss_sp);
copySize += 3 * sizeof(WORD) + sizeof(STACK16FRAME);
NtCurrentTeb()->WOW32Reserved = (void *)MAKESEGPTR( seg, ptr - copySize );
newFrame = CURRENT_STACK16;
/* Copy the stack frame and the local variables to the new stack */
memmove( newFrame, oldFrame, copySize );
newFrame->bp = ptr;
*(WORD *)MapSL( MAKESEGPTR( seg, ptr ) ) = 0; /* clear previous bp */
}
开发者ID:Barrell,项目名称:wine,代码行数:41,代码来源:task.c
示例9: serd_walk_init
static int
serd_walk_init(mdb_walk_state_t *wsp)
{
fmd_serd_hash_t sh;
if (mdb_vread(&sh, sizeof (sh), wsp->walk_addr) != sizeof (sh)) {
mdb_warn("failed to read fmd_serd_hash at %p", wsp->walk_addr);
return (WALK_ERR);
}
return (hash_walk_init(wsp, (uintptr_t)sh.sh_hash, sh.sh_hashlen,
"fmd_serd_eng", sizeof (fmd_serd_eng_t),
OFFSETOF(fmd_serd_eng_t, sg_next)));
}
开发者ID:AlainODea,项目名称:illumos-gate,代码行数:14,代码来源:fmd_mdb.c
示例10: glGenVertexArrays
void sb7fbxmodel::sub_mesh_set_up(sub_mesh& sm)
{
glGenVertexArrays(1, &sm.vao);
glBindVertexArray(sm.vao);
glGenBuffers(1, &sm.vbo);
glBindBuffer(GL_ARRAY_BUFFER, sm.vao);
glBufferData(GL_ARRAY_BUFFER, sizeof(vetex_attr) * sm.count, sm.va, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(vetex_attr), NULL);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(vetex_attr), (void*)OFFSETOF(vetex_attr, normal));
glEnableVertexAttribArray(0);
//glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 5 * sizeof(GL_FLOAT), (GLvoid*)(3 * sizeof(GL_FLOAT)));
//glEnableVertexAttribArray(1);
glBindVertexArray(0);
}
开发者ID:huangchen329,项目名称:learn_opengl,代码行数:14,代码来源:sb7fbxmodel.cpp
示例11: SwitchStackBack16
/***********************************************************************
* SwitchStackBack (KERNEL.109)
*/
void WINAPI SwitchStackBack16( CONTEXT *context )
{
STACK16FRAME *oldFrame, *newFrame;
INSTANCEDATA *pData;
if (!(pData = GlobalLock16(SELECTOROF(NtCurrentTeb()->WOW32Reserved))))
return;
if (!pData->old_ss_sp)
{
WARN("No previous SwitchStackTo\n" );
return;
}
TRACE("restoring stack %04x:%04x\n",
SELECTOROF(pData->old_ss_sp), OFFSETOF(pData->old_ss_sp) );
oldFrame = CURRENT_STACK16;
/* Pop bp from the previous stack */
context->Ebp = (context->Ebp & ~0xffff) | *(WORD *)MapSL(pData->old_ss_sp);
pData->old_ss_sp += sizeof(WORD);
/* Switch back to the old stack */
NtCurrentTeb()->WOW32Reserved = (void *)(pData->old_ss_sp - sizeof(STACK16FRAME));
context->SegSs = SELECTOROF(pData->old_ss_sp);
context->Esp = OFFSETOF(pData->old_ss_sp) - sizeof(DWORD); /*ret addr*/
pData->old_ss_sp = 0;
/* Build a stack frame for the return */
newFrame = CURRENT_STACK16;
newFrame->frame32 = oldFrame->frame32;
newFrame->module_cs = oldFrame->module_cs;
newFrame->callfrom_ip = oldFrame->callfrom_ip;
newFrame->entry_ip = oldFrame->entry_ip;
}
开发者ID:Barrell,项目名称:wine,代码行数:40,代码来源:task.c
示例12: DOSDEV_FindCharDevice
DWORD DOSDEV_FindCharDevice(char*name)
{
SEGPTR cur_ptr = MAKESEGPTR(HIWORD(DOS_LOLSeg), FIELD_OFFSET(DOS_LISTOFLISTS,NUL_dev));
DOS_DEVICE_HEADER *cur = PTR_REAL_TO_LIN(SELECTOROF(cur_ptr),OFFSETOF(cur_ptr));
char dname[8];
int cnt;
/* get first 8 characters */
/* if less than 8 characters, pad with spaces */
for (cnt=0; name[cnt] && cnt<8; cnt++)
dname[cnt]=name[cnt];
while(cnt<8) dname[cnt++] = ' ';
/* search for char devices with the right name */
while (cur &&
((!(cur->attr & ATTR_CHAR)) ||
memcmp(cur->name,dname,8))) {
cur_ptr = cur->next_dev;
if (cur_ptr == NONEXT) cur=NULL;
else cur = PTR_REAL_TO_LIN(SELECTOROF(cur_ptr),OFFSETOF(cur_ptr));
}
return cur_ptr;
}
开发者ID:WASSUM,项目名称:longene_travel,代码行数:24,代码来源:devices.c
示例13: xpc_walk_init
static int
xpc_walk_init(mdb_walk_state_t *wsp)
{
fmd_xprt_class_hash_t xch;
if (mdb_vread(&xch, sizeof (xch), wsp->walk_addr) != sizeof (xch)) {
mdb_warn("failed to read fmd_xprt_class_hash at %p",
wsp->walk_addr);
return (WALK_ERR);
}
return (hash_walk_init(wsp, (uintptr_t)xch.xch_hash, xch.xch_hashlen,
"fmd_xprt_class", sizeof (fmd_xprt_class_t),
OFFSETOF(fmd_xprt_class_t, xc_next)));
}
开发者ID:AlainODea,项目名称:illumos-gate,代码行数:15,代码来源:fmd_mdb.c
示例14: sparc_update_pc
/* Update Pike_fp->pc */
void sparc_update_pc(void)
{
LOAD_PIKE_FP();
#ifdef PIKE_BYTECODE_SPARC64
/* The ASR registers are implementation specific in Sparc V7 and V8. */
/* rd %pc, %o7 */
SPARC_RD(SPARC_REG_O7, SPARC_RD_REG_PC);
#else /* !0 */
/* call .+8 */
SPARC_CALL(8);
/* The new %o7 is available in the delay slot. */
#endif /* 0 */
/* stw %o7, [ %pike_fp + pc ] */
PIKE_STPTR(SPARC_REG_O7, SPARC_REG_PIKE_FP, OFFSETOF(pike_frame, pc), 1);
}
开发者ID:pikelang,项目名称:Pike,代码行数:16,代码来源:sparc.c
示例15: pcie_war_noplldown
/* Needs to happen when coming out of 'standby'/'hibernate' */
static void
pcie_war_noplldown(pcicore_info_t *pi)
{
sbpcieregs_t *pcieregs = pi->regs.pcieregs;
uint16 *reg16;
ASSERT(pi->sih->buscorerev == 7);
/* turn off serdes PLL down */
si_corereg(pi->sih, SI_CC_IDX, OFFSETOF(chipcregs_t, chipcontrol),
CHIPCTRL_4321_PLL_DOWN, CHIPCTRL_4321_PLL_DOWN);
/* clear srom shadow backdoor */
reg16 = &pcieregs->sprom[SRSH_BD_OFFSET];
W_REG(pi->osh, reg16, 0);
}
开发者ID:ariavie,项目名称:bcm,代码行数:17,代码来源:nicpci.c
示例16: dhd_conf_set_hw_oob_intr
void
dhd_conf_set_hw_oob_intr(bcmsdh_info_t *sdh, uint chip)
{
uint32 gpiocontrol, addr;
if (CHIPID(chip) == BCM43362_CHIP_ID) {
printf("%s: Enable HW OOB for 43362\n", __FUNCTION__);
addr = SI_ENUM_BASE + OFFSETOF(chipcregs_t, gpiocontrol);
gpiocontrol = bcmsdh_reg_read(sdh, addr, 4);
gpiocontrol |= 0x2;
bcmsdh_reg_write(sdh, addr, 4, gpiocontrol);
bcmsdh_cfg_write(sdh, SDIO_FUNC_1, 0x10005, 0xf, NULL);
bcmsdh_cfg_write(sdh, SDIO_FUNC_1, 0x10006, 0x0, NULL);
bcmsdh_cfg_write(sdh, SDIO_FUNC_1, 0x10007, 0x2, NULL);
}
}
开发者ID:davidftv,项目名称:s82_kernel,代码行数:16,代码来源:dhd_config.c
示例17: THROW_IF
/* Rename document name in document list */
void UpdateDocumentName
(
UInt16 index, /* record index */
const Char* name, /* new document name */
const Char* filename /* new filename */
)
/* THROWS */
{
MemHandle handle;
DocumentData* handlePtr;
THROW_IF( name == NULL || *name == '\0', errNoDocumentName );
handle = OpenRecord( plkrDocList, index );
THROW_IF( handle == NULL, DmGetLastErr() );
handlePtr = MemHandleLock( handle );
DmWrite( handlePtr, OFFSETOF( DocumentData, name ),
name, StrLen( name ) + 1 );
if ( handlePtr->location != RAM ) {
DocumentData* dataPtr;
UInt16 infoSize;
UInt16 dataSize;
Char volumeLabel[ LABEL_LEN ];
UInt16 fileLength;
UInt16 volumeLabelLength;
fileLength = StrLen( handlePtr->data ) + 1;
volumeLabelLength = StrLen( handlePtr->data + fileLength ) + 1;
StrNCopy( volumeLabel, handlePtr->data + fileLength,
volumeLabelLength );
MemHandleUnlock( handle );
infoSize = sizeof *dataPtr;
dataSize = StrLen( filename ) + StrLen( volumeLabel ) + 2;
handle = ResizeRecord( plkrDocList, index, infoSize + dataSize );
dataPtr = MemHandleLock( handle );
DmWrite( dataPtr, infoSize, filename, StrLen( filename ) + 1 );
DmWrite( dataPtr, infoSize + StrLen( filename ) + 1, volumeLabel,
StrLen( volumeLabel ) + 1 );
}
MemHandleUnlock( handle );
CloseRecord( handle, true );
DmInsertionSort( plkrDocList, CompareDocumentNames, 0 );
}
开发者ID:TimofonicJunkRoom,项目名称:plucker-1,代码行数:48,代码来源:doclist.c
示例18: add_inter
int4 add_inter(int val, sm_int_ptr_t addr, sm_global_latch_ptr_t latch)
{
int4 cntrval, newcntrval, spins, maxspins, retries;
boolean_t cswpsuccess;
sm_int_ptr_t volatile cntrval_p;
++fast_lock_count;
maxspins = num_additional_processors ? MAX_LOCK_SPINS(LOCK_SPINS, num_additional_processors) : 1;
cntrval_p = addr; /* Need volatile context especially on Itanium */
for (retries = LOCK_TRIES - 1; 0 < retries; retries--) /* - 1 so do rel_quant 3 times first */
{ /* seems like a legitinate spin which could take advantage of transactional memory */
for (spins = maxspins; 0 < spins; spins--)
{
cntrval = *cntrval_p;
newcntrval = cntrval + val;
/* This is (currently as of 08/2007) the only non-locking usage of compswap in GT.M. We
are not passing compswap an actual sm_global_latch_ptr_t addr like its function would
normally dictate. However, since the address of the field we want to deal with is the
first int in the global_latch_t, we just pass our int address properly cast to the
type that compswap is expecting. The assert below verifies that this assumption has
not changed (SE 08/2007)
*/
assert(0 == OFFSETOF(global_latch_t, u.parts.latch_pid));
IA64_ONLY(cswpsuccess = compswap_unlock(RECAST(sm_global_latch_ptr_t)cntrval_p, cntrval, newcntrval));
NON_IA64_ONLY(cswpsuccess = compswap((sm_global_latch_ptr_t)cntrval_p, cntrval, newcntrval));
if (cswpsuccess)
{
--fast_lock_count;
assert(0 <= fast_lock_count);
return newcntrval;
}
}
if (retries & 0x3)
/* On all but every 4th pass, do a simple rel_quant */
rel_quant(); /* Release processor to holder of lock (hopefully) */
else
{
/* On every 4th pass, we bide for awhile */
wcs_sleep(LOCK_SLEEP);
assert(0 == (LOCK_TRIES % 4)); /* assures there are 3 rel_quants prior to first wcs_sleep() */
}
}
--fast_lock_count;
assert(FALSE);
rts_error_csa(CSA_ARG(NULL) VARLSTCNT(9) ERR_DBCCERR, 2, LEN_AND_LIT("*unknown*"), ERR_ERRCALL, 3, CALLFROM);
return 0; /* To keep the compiler quiet */
}
开发者ID:mihawk,项目名称:fis-gtm,代码行数:47,代码来源:add_inter.c
示例19: RunDLL_CallEntry16
/*************************************************************************
* RunDLL_CallEntry16
*
* Only exported from shell32 on Windows, probably imported
* from shell through the 16/32 thunks.
*/
void WINAPI RunDLL_CallEntry16( DWORD proc, HWND hwnd, HINSTANCE inst, LPCSTR cmdline, INT cmdshow )
{
WORD args[5];
SEGPTR cmdline_seg;
TRACE( "proc %x hwnd %p inst %p cmdline %s cmdshow %d\n",
proc, hwnd, inst, debugstr_a(cmdline), cmdshow );
cmdline_seg = MapLS( cmdline );
args[4] = HWND_16(hwnd);
args[3] = MapHModuleLS(inst);
args[2] = SELECTOROF(cmdline_seg);
args[1] = OFFSETOF(cmdline_seg);
args[0] = cmdshow;
WOWCallback16Ex( proc, WCB16_PASCAL, sizeof(args), args, NULL );
UnMapLS( cmdline_seg );
}
开发者ID:AlexSteel,项目名称:wine,代码行数:23,代码来源:shell.c
示例20: DOSDEV_DoReq
static void DOSDEV_DoReq(void*req, DWORD dev)
{
REQUEST_HEADER *hdr = (REQUEST_HEADER *)req;
DOS_DEVICE_HEADER *dhdr;
CONTEXT86 ctx;
char *phdr;
dhdr = PTR_REAL_TO_LIN(SELECTOROF(dev),OFFSETOF(dev));
phdr = ((char*)DOSMEM_LOL()) + DOS_DATASEG_OFF(req);
/* copy request to request scratch area */
memcpy(phdr, req, hdr->size);
/* prepare to call device driver */
memset(&ctx, 0, sizeof(ctx));
ctx.EFlags |= V86_FLAG;
/* ES:BX points to request for strategy routine */
ctx.SegEs = HIWORD(DOS_LOLSeg);
ctx.Ebx = DOS_DATASEG_OFF(req);
/* call strategy routine */
ctx.SegCs = SELECTOROF(dev);
ctx.Eip = dhdr->strategy;
DPMI_CallRMProc(&ctx, 0, 0, 0);
/* call interrupt routine */
ctx.SegCs = SELECTOROF(dev);
ctx.Eip = dhdr->interrupt;
DPMI_CallRMProc(&ctx, 0, 0, 0);
/* completed, copy request back */
memcpy(req, phdr, hdr->size);
if (hdr->status & STAT_ERROR) {
switch (hdr->status & STAT_MASK) {
case 0x0F: /* invalid disk change */
/* this error seems to fit the bill */
SetLastError(ERROR_NOT_SAME_DEVICE);
break;
default:
SetLastError((hdr->status & STAT_MASK) + 0x13);
break;
}
}
}
开发者ID:WASSUM,项目名称:longene_travel,代码行数:46,代码来源:devices.c
注:本文中的OFFSETOF函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论